diff --git a/atoms.cpp b/atoms.cpp index f674b2aa1a..f53ef31d83 100644 --- a/atoms.cpp +++ b/atoms.cpp @@ -114,6 +114,9 @@ Atoms::Atoms() atoms[n] = &net_wm_sync_request; names[n++] = (char*) "_NET_WM_SYNC_REQUEST"; + atoms[n] = &kde_net_wm_block_compositing; + names[n++] = (char*) "_KDE_NET_WM_BLOCK_COMPOSITING"; + atoms[n] = &kde_net_wm_shadow; names[n++] = (char*) "_KDE_NET_WM_SHADOW"; diff --git a/atoms.h b/atoms.h index aed9d83e4a..e51411fc25 100644 --- a/atoms.h +++ b/atoms.h @@ -60,6 +60,7 @@ public: Atom kde_net_wm_frame_strut; Atom net_wm_sync_request_counter; Atom net_wm_sync_request; + Atom kde_net_wm_block_compositing; Atom kde_net_wm_shadow; }; diff --git a/client.cpp b/client.cpp index 0172a10c85..98f3290cf3 100644 --- a/client.cpp +++ b/client.cpp @@ -95,6 +95,7 @@ Client::Client(Workspace* ws) , transient_for (NULL) , transient_for_id(None) , original_transient_for_id(None) + , blocks_compositing(false) , autoRaiseTimer(NULL) , shadeHoverTimer(NULL) , delayedMoveResizeTimer(NULL) @@ -2114,6 +2115,20 @@ void Client::updateCursor() cursor.handle(), xTime()); } +void Client::updateCompositeBlocking(bool readProperty) +{ + const bool usedToBlock = blocks_compositing; + if (readProperty) { + const unsigned long properties[2] = {0, NET::WM2BlockCompositing}; + NETWinInfo2 i(QX11Info::display(), window(), rootWindow(), properties, 2); + blocks_compositing = rules()->checkBlockCompositing(i.isBlockingCompositing()); + } + else + blocks_compositing = rules()->checkBlockCompositing(blocks_compositing); + if (usedToBlock != blocks_compositing) + workspace()->updateCompositeBlocking(blocks_compositing ? this : 0); +} + Client::Position Client::mousePosition(const QPoint& p) const { if (decoration != NULL) diff --git a/client.h b/client.h index 0d479a0f93..5dd47027fd 100644 --- a/client.h +++ b/client.h @@ -295,6 +295,8 @@ public: virtual void setupCompositing(); virtual void finishCompositing(); + inline bool isBlockingCompositing() { return blocks_compositing; } + void updateCompositeBlocking(bool readProperty = false); QString caption(bool full = true) const; void updateCaption(); @@ -647,6 +649,7 @@ private: uint urgency : 1; ///< XWMHints, UrgencyHint uint ignore_focus_stealing : 1; ///< Don't apply focus stealing prevention to this client uint demands_attention : 1; + bool blocks_compositing; WindowRules client_rules; void getWMHints(); void readIcons(); diff --git a/clients/tabstrip/tabstrip.desktop b/clients/tabstrip/tabstrip.desktop index 84d2b4e491..10423e0deb 100644 --- a/clients/tabstrip/tabstrip.desktop +++ b/clients/tabstrip/tabstrip.desktop @@ -21,7 +21,7 @@ Name[he]=רצועת לשוניות Name[hi]=टैबपट्टी Name[hr]=Kartični prikaz Name[hu]=Lapsáv -Name[ia]=Banda de Scheda (Tabstrip) +Name[ia]=Banda de scheda (Tabstrip) Name[id]=Tabstrip Name[is]=Tabstrip Name[it]=Linguette diff --git a/composite.cpp b/composite.cpp index 0c8d7090b2..66638b11de 100644 --- a/composite.cpp +++ b/composite.cpp @@ -282,6 +282,32 @@ void Workspace::toggleCompositing() } } +void Workspace::updateCompositeBlocking(Client *c) +{ + if (c) { // if c == 0 we just check if we can resume + if (c->isBlockingCompositing()) { + compositingBlocked = true; + suspendCompositing(true); + } + } + else if (compositingBlocked) { // lost a client and we're blocked - can we resume? + // NOTICE do NOT check for "compositingSuspended" or "!compositing()" + // only "resume" if it was really disabled for a block + bool resume = true; + for (ClientList::ConstIterator it = clients.constBegin(); it != clients.constEnd(); ++it) { + if ((*it)->isBlockingCompositing()) { + resume = false; + break; + } + } + if (resume) { // do NOT attempt to call suspendCompositing(false); from within the eventchain! + compositingBlocked = false; + if (compositingSuspended) + QMetaObject::invokeMethod(this, "slotToggleCompositing", Qt::QueuedConnection); + } + } +} + void Workspace::suspendCompositing() { suspendCompositing(true); diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index ca6ff12ed3..10a5253cf2 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -37,6 +37,6 @@ install( TARGETS kwin_update_tabbox_settings DESTINATION ${LIB_INSTALL_DIR}/kcon install( FILES fsp_workarounds_1.kwinrules DESTINATION ${DATA_INSTALL_DIR}/kwin/default_rules ) install( FILES pop.wav DESTINATION ${SOUND_INSTALL_DIR} ) -install( FILES kwin.upd kwinsticky.upd kwiniconify.upd kwin3_plugin.upd kwin_focus1.upd kwinupdatewindowsettings.upd kwin_focus2.upd kwin_fsp_workarounds_1.upd kwin_on_off.upd kwin_window_shortcuts.upd kwin_update_tabbox_settings.upd kwin_blacklist.upd DESTINATION ${KCONF_UPDATE_INSTALL_DIR} ) -install( PROGRAMS pluginlibFix.pl kwin3_plugin.pl kwin_focus1.sh kwin_focus2.sh on-off_to_true-false.sh kwin_window_shortcuts.sh kwin_blacklist.sh DESTINATION ${KCONF_UPDATE_INSTALL_DIR} ) +install( FILES kwin.upd kwinsticky.upd kwiniconify.upd kwin3_plugin.upd kwin_focus1.upd kwinupdatewindowsettings.upd kwin_focus2.upd kwin_fsp_workarounds_1.upd kwin_on_off.upd kwin_window_shortcuts.upd kwin_update_tabbox_settings.upd DESTINATION ${KCONF_UPDATE_INSTALL_DIR} ) +install( PROGRAMS pluginlibFix.pl kwin3_plugin.pl kwin_focus1.sh kwin_focus2.sh on-off_to_true-false.sh kwin_window_shortcuts.sh DESTINATION ${KCONF_UPDATE_INSTALL_DIR} ) diff --git a/data/fsp_workarounds_1.kwinrules b/data/fsp_workarounds_1.kwinrules index 9d0e0b8597..b7e88856dd 100644 --- a/data/fsp_workarounds_1.kwinrules +++ b/data/fsp_workarounds_1.kwinrules @@ -28,7 +28,7 @@ Description[hne]=(डिफाल्ट) एक्स वी बर फोकस Description[hr]=(Zadano) Onemogućuje prevenciju oduzimanja fokusa XV-u Description[hsb]=(Standard) XV zakazać, zo fokus na so storhnje Description[hu]=(Alapértelmezés) A fókusz elvételét megakadályozó funkció kikapcsolása az XV esetén -Description[ia]=(Predefinite) Dishabilitar le prevention de furto de foco pro XV +Description[ia]=(Predefinite) Dishabilita le prevention de furto de foco pro XV Description[id]=(Standar) Nonaktifkan pencegahan pencurian fokus untuk XV Description[is]=(Sjálfgefið) Aftengja vörn gegn fókusþjófnaði fyrir XV Description[it]=(Predefinita) Disabilita la prevenzione della cattura del fuoco per XV diff --git a/data/kwin_blacklist.sh b/data/kwin_blacklist.sh deleted file mode 100755 index 01afdec3f6..0000000000 --- a/data/kwin_blacklist.sh +++ /dev/null @@ -1,14 +0,0 @@ -while read line; do - echo $line -done - -echo "" -echo "[Blacklist][Lanczos]" -echo "Intel=GM45 Express Chipset GEM 20100328:-:7.8.2,GM45 Express Chipset GEM 20091221:-:7.7.1,965GM GEM 20100328 2010Q1:-:7.8.2,965GM GEM 20091221 2009Q4:-:7.7.1,Ironlake Mobile GEM 20100328:-:7.8.2" -echo "Advanced Micro Devices=DRI R600:-:7.8.1,DRI R600:-:7.8.2" -echo "" -echo "[Blacklist][Blur]" -echo "Advanced Micro Devices=DRI R600:-:7.8.1,DRI R600:-:7.8.2" -echo "Ati=Radeon HD 3650:-:3.3.9901" -echo "NVIDIA=GeForce 6150/PCI/SSE2:-:195" -echo "" \ No newline at end of file diff --git a/data/kwin_blacklist.upd b/data/kwin_blacklist.upd deleted file mode 100644 index 59bfda6305..0000000000 --- a/data/kwin_blacklist.upd +++ /dev/null @@ -1,3 +0,0 @@ -Id=Blacklist-4.5 -File=kwinrc -Script=kwin_blacklist.sh,sh diff --git a/effects/_test/drunken.desktop b/effects/_test/drunken.desktop index d41df0f4f5..50d4aea673 100644 --- a/effects/_test/drunken.desktop +++ b/effects/_test/drunken.desktop @@ -26,7 +26,7 @@ Name[hi]=ड्रंकन Name[hne]=ड्रंकन Name[hr]=Pijan Name[hu]=Dülöngélés -Name[ia]=Inebriato +Name[ia]=Inebriate Name[id]=Mabuk Name[is]=Drukkinn Name[it]=Ubriaco diff --git a/effects/_test/flame.desktop b/effects/_test/flame.desktop index 10d4e8637c..7a799048af 100644 --- a/effects/_test/flame.desktop +++ b/effects/_test/flame.desktop @@ -30,7 +30,7 @@ Name[hi]=ज्वाला Name[hne]=ज्वाला Name[hr]=Plamen Name[hu]=Lángok -Name[ia]=Flammar +Name[ia]=Flamma Name[id]=Api Name[is]=Logar Name[it]=Fiamma diff --git a/effects/_test/gears.desktop b/effects/_test/gears.desktop index ebd2159cb8..043517421b 100644 --- a/effects/_test/gears.desktop +++ b/effects/_test/gears.desktop @@ -21,7 +21,7 @@ Name[gl]=Engrenaxes no cubo Name[he]=גלגלי שיניים בקובייה Name[hi]=क्यूब गेयर Name[hr]=Kocka s zupčanicima -Name[ia]=Rotas dentate del Cubo +Name[ia]=Rotas dentate del cubo Name[id]=Gigi Kubus Name[is]=Kubbagírar Name[it]=Ingranaggi del cubo @@ -80,7 +80,7 @@ Comment[ga]=Taispeáin giaranna laistigh den chiúb Comment[gl]=Mostra engrenaxes dentro do cubo Comment[he]=מציג גלגלי שיניים בתוך קובייה Comment[hr]=Prikazuj zupčanike unutar kocke -Comment[ia]=Monstrar rotas dentate intra le cubo +Comment[ia]=Monstra rotas dentate intra le cubo Comment[id]=Tampilkan gigi di dalam kubus Comment[is]=Sýnir gírhjól innan í kassanum Comment[it]=Mostra gli ingranaggi nel cubo diff --git a/effects/_test/howto.desktop b/effects/_test/howto.desktop index 28f4347124..ce3d13dc30 100644 --- a/effects/_test/howto.desktop +++ b/effects/_test/howto.desktop @@ -29,7 +29,7 @@ Name[hi]=कैसे Name[hne]=कइसन Name[hr]=Kako Name[hu]=Leírás -Name[ia]=Howto (Como Es) +Name[ia]=Howto (Como il es) Name[id]=Howto Name[is]=Hvernig Name[it]=Come si fa diff --git a/effects/_test/kicker/kicker.desktop b/effects/_test/kicker/kicker.desktop index 287f639d8e..314744c192 100644 --- a/effects/_test/kicker/kicker.desktop +++ b/effects/_test/kicker/kicker.desktop @@ -38,6 +38,7 @@ Comment[sr@ijekavianlatin]=Demonstracioni efekat za upotrebu EffectFrames Comment[sr@latin]=Demonstracioni efekat za upotrebu EffectFrames Comment[sv]=Demonstationseffekt för att använda effektramar- Comment[th]=ลูกเล่นสาธิตของการใช้กรอบลูกเล่น (EffectFrames) +Comment[tr]=EfektÇerçeveleri (EffectFrames) kullanımında gösteri efekti Comment[uk]=Приклад використання EffectFrames Comment[x-test]=xxDemonstration effect for using EffectFramesxx Comment[zh_CN]=使用 EffectFrames 的演示特效 diff --git a/effects/_test/slidetabs/slidetabs.desktop b/effects/_test/slidetabs/slidetabs.desktop index cb01a7c97c..c38103b1d9 100644 --- a/effects/_test/slidetabs/slidetabs.desktop +++ b/effects/_test/slidetabs/slidetabs.desktop @@ -18,7 +18,7 @@ Name[ga]=Sleamhnaigh Cluaisíní Name[he]=החלקת לשוניות Name[hi]=टैब स्लाइड Name[hr]=Kliži kartice -Name[ia]=Schedas a Glissar +Name[ia]=Schedas a glissar Name[id]=Tab Geser Name[is]=Renna flipum Name[it]=Fai scivolare le schede @@ -76,7 +76,7 @@ Comment[fy]=Glydet finsters as der wiksele of groepearre wurdt fan ljeppers Comment[ga]=Sleamhnaigh fuinneoga agus cluaisíní á ngrúpáil nó á n-athrú. Comment[he]=גלישת חלונות במעבר או קיבוץ לשוניות. Comment[hr]=Kliži prozore kada se prebacuju između ili grupiraju u kartice. -Comment[ia]=Glissar fenestras quando on commuta o gruppa scheda. +Comment[ia]=Glissa fenestras quando on commuta o gruppa scheda. Comment[id]=Geser jendela ketika memindahkan atau mengelompokkan tab. Comment[is]=Renna gluggum yfir skjáinn þegar skipt er um flipa eða þeir eru hópaðir. Comment[it]=Fai scivolare le finestre quando si cambiano o raggruppano le schede. diff --git a/effects/_test/slidetabs/slidetabs_config.desktop b/effects/_test/slidetabs/slidetabs_config.desktop index e75cf31fe8..ce5b733ce1 100644 --- a/effects/_test/slidetabs/slidetabs_config.desktop +++ b/effects/_test/slidetabs/slidetabs_config.desktop @@ -25,7 +25,7 @@ Name[ga]=Sleamhnaigh Cluaisíní Name[he]=החלקת לשוניות Name[hi]=टैब स्लाइड Name[hr]=Kliži kartice -Name[ia]=Schedas a Glissar +Name[ia]=Schedas a glissar Name[id]=Tab Geser Name[is]=Renna flipum Name[it]=Fai scivolare le schede diff --git a/effects/_test/swiveltabs/swiveltabs.desktop b/effects/_test/swiveltabs/swiveltabs.desktop index 07e4fcc808..8bd6529815 100644 --- a/effects/_test/swiveltabs/swiveltabs.desktop +++ b/effects/_test/swiveltabs/swiveltabs.desktop @@ -18,7 +18,7 @@ Name[ga]=Cluaisíní Sclóine Name[he]=לשוניות מסתובבות Name[hi]=घूमते टैब Name[hr]=Kartice koje se okreću oko osi -Name[ia]=Schedas cardine +Name[ia]=Schedas de cardine Name[id]=Tab Putar Name[is]=Snúa flipum Name[it]=Fai girare le schede diff --git a/effects/_test/swiveltabs/swiveltabs_config.desktop b/effects/_test/swiveltabs/swiveltabs_config.desktop index c5a0a938dc..592ea3ef84 100644 --- a/effects/_test/swiveltabs/swiveltabs_config.desktop +++ b/effects/_test/swiveltabs/swiveltabs_config.desktop @@ -25,7 +25,7 @@ Name[ga]=Cluaisíní Sclóine Name[he]=לשוניות מסתובבות Name[hi]=घूमते टैब Name[hr]=Kartice koje se okreću oko osi -Name[ia]=Schedas cardine +Name[ia]=Schedas de cardine Name[id]=Tab Putar Name[is]=Snúa flipum Name[it]=Fai girare le schede diff --git a/effects/_test/test_thumbnail.desktop b/effects/_test/test_thumbnail.desktop index 3a03b10e90..19cefbf07c 100644 --- a/effects/_test/test_thumbnail.desktop +++ b/effects/_test/test_thumbnail.desktop @@ -29,7 +29,7 @@ Name[hi]=लघुछवि_जाँचें Name[hne]=चिनहा_जांचव Name[hr]=Text_Sličica Name[hu]=Teszt-gyorsnézet -Name[ia]=Test_Thumbnail (Essaya Notas) +Name[ia]=Test_Thumbnail (Essaya miniaturas) Name[id]=Test_Thumbnail Name[is]=Prófa_smámynd Name[it]=Prova_miniatura diff --git a/effects/_test/videorecord.desktop b/effects/_test/videorecord.desktop index 6452ee2d44..191682700d 100644 --- a/effects/_test/videorecord.desktop +++ b/effects/_test/videorecord.desktop @@ -32,7 +32,7 @@ Name[hi]=वीडियो रेकॉर्ड Name[hne]=वीडियो रेकार्ड Name[hr]=Snimanje videa Name[hu]=Videófelvevő -Name[ia]=Registrar Video +Name[ia]=Video registra Name[id]=Rekam Video Name[is]=Vídeó upptaka Name[it]=Registra video diff --git a/effects/_test/videorecord_config.desktop b/effects/_test/videorecord_config.desktop index fafc6c4c8e..1547a5b07a 100644 --- a/effects/_test/videorecord_config.desktop +++ b/effects/_test/videorecord_config.desktop @@ -39,7 +39,7 @@ Name[hi]=वीडियो रेकॉर्ड Name[hne]=वीडियो रेकार्ड Name[hr]=Snimanje videa Name[hu]=Videófelvevő -Name[ia]=Registrar Video +Name[ia]=Video registra Name[id]=Rekam Video Name[is]=Vídeó upptaka Name[it]=Registra video diff --git a/effects/blur/blur.desktop b/effects/blur/blur.desktop index 94e0e76970..cc8e00d9f1 100644 --- a/effects/blur/blur.desktop +++ b/effects/blur/blur.desktop @@ -32,7 +32,7 @@ Name[hne]=धुंधला करव Name[hr]=Mrlja Name[hsb]=Młowojty Name[hu]=Elmosódás -Name[ia]=Obscurar +Name[ia]=Obscura (Blur) Name[id]=Samar Name[is]=Móða Name[it]=Sfocatura diff --git a/effects/blur/blur_config.desktop b/effects/blur/blur_config.desktop index 276515c6be..7aeaf639a9 100644 --- a/effects/blur/blur_config.desktop +++ b/effects/blur/blur_config.desktop @@ -39,7 +39,7 @@ Name[hne]=धुंधला करव Name[hr]=Mrlja Name[hsb]=Młowojty Name[hu]=Elmosódás -Name[ia]=Obscurar +Name[ia]=Obscura (Blur) Name[id]=Samar Name[is]=Móða Name[it]=Sfocatura diff --git a/effects/boxswitch/boxswitch.desktop b/effects/boxswitch/boxswitch.desktop index 768c23a2cc..2e971dd946 100644 --- a/effects/boxswitch/boxswitch.desktop +++ b/effects/boxswitch/boxswitch.desktop @@ -28,7 +28,7 @@ Name[hne]=बाक्स स्विच Name[hr]=Kartična promjena Name[hsb]=Kašćikowe přešaltowanje Name[hu]=Váltódoboz -Name[ia]=Commutator de Quadrato (Box Switch) +Name[ia]=Commutator de quadrato Name[id]=Ganti Kotak Name[is]=Kassaskiptir Name[it]=Scambiafinestre a caselle diff --git a/effects/boxswitch/boxswitch_config.desktop b/effects/boxswitch/boxswitch_config.desktop index 6e9f52291a..29777a6008 100644 --- a/effects/boxswitch/boxswitch_config.desktop +++ b/effects/boxswitch/boxswitch_config.desktop @@ -35,7 +35,7 @@ Name[hne]=बाक्स स्विच Name[hr]=Kartična promjena Name[hsb]=Kašćikowe přešaltowanje Name[hu]=Váltódoboz -Name[ia]=Commutator de Quadrato (Box Switch) +Name[ia]=Commutator de quadrato Name[id]=Ganti Kotak Name[is]=Kassaskiptir Name[it]=Scambiafinestre a caselle diff --git a/effects/coverswitch/coverswitch.cpp b/effects/coverswitch/coverswitch.cpp index 4728689929..9f462f172c 100644 --- a/effects/coverswitch/coverswitch.cpp +++ b/effects/coverswitch/coverswitch.cpp @@ -988,6 +988,8 @@ void CoverSwitchEffect::abort() void CoverSwitchEffect::slotWindowClosed(EffectWindow* c) { + if (c == selected_window) + selected_window = 0; // if the list is not empty, the effect is active if (!currentWindowList.isEmpty()) { c->refWindow(); diff --git a/effects/coverswitch/coverswitch.desktop b/effects/coverswitch/coverswitch.desktop index e9884d2481..dffd0d016e 100644 --- a/effects/coverswitch/coverswitch.desktop +++ b/effects/coverswitch/coverswitch.desktop @@ -25,7 +25,7 @@ Name[hi]=कवर स्विच Name[hne]=कवर स्विच Name[hr]=Pokrivač – promjena Name[hu]=Fedett váltódoboz -Name[ia]=Commutar Copertura +Name[ia]=Commutator de copertura Name[id]=Ganti Sampul Name[is]=Síðuskiptir Name[it]=Scambiafinestre circolare diff --git a/effects/coverswitch/coverswitch_config.desktop b/effects/coverswitch/coverswitch_config.desktop index a4c9c70338..53b46e74b1 100644 --- a/effects/coverswitch/coverswitch_config.desktop +++ b/effects/coverswitch/coverswitch_config.desktop @@ -32,7 +32,7 @@ Name[hi]=कवर स्विच Name[hne]=कवर स्विच Name[hr]=Pokrivač – promjena Name[hu]=Fedett váltódoboz -Name[ia]=Commutar Copertura +Name[ia]=Commutator de copertura Name[id]=Ganti Sampul Name[is]=Síðuskiptir Name[it]=Scambiafinestre circolare diff --git a/effects/cube/cube.desktop b/effects/cube/cube.desktop index e703de75c0..8bdb42d678 100644 --- a/effects/cube/cube.desktop +++ b/effects/cube/cube.desktop @@ -29,7 +29,7 @@ Name[hne]=डेस्कटाप घन Name[hr]=Radna površina na kocki Name[hsb]=Kóstka Name[hu]=Asztalkocka -Name[ia]=Cubo de Scriptorio +Name[ia]=Cubo de scriptorio Name[id]=Kubus Desktop Name[is]=Skjáborðskubbur Name[it]=Cubo dei desktop @@ -104,7 +104,7 @@ Comment[hne]=हर एक आभासी डेस्कटाप ल घन Comment[hr]=Prikazuje svaku virtualnu radnu površinu na strani kocke Comment[hsb]=Pokazuje kóždy wirtuelny dźěłowy powjerch na boku kóstki Comment[hu]=A virtuális asztalok egy kocka lapjain jelennek meg -Comment[ia]=Monstrar cata scriptorio virtual sur un facie de un cubo +Comment[ia]=Monstra cata scriptorio virtual sur un facie de un cubo Comment[id]=Tampilkan tiap desktop virtual di sisi sebuah kubus Comment[is]=Sýnir hvert sýndarskjáborð á sinni hlið kassa Comment[it]=Mostra ogni desktop virtuale sul lato di un cubo diff --git a/effects/cube/cube_config.desktop b/effects/cube/cube_config.desktop index 747b7cfd8c..9b07bcd9f1 100644 --- a/effects/cube/cube_config.desktop +++ b/effects/cube/cube_config.desktop @@ -36,7 +36,7 @@ Name[hne]=डेस्कटाप घन Name[hr]=Radna površina na kocki Name[hsb]=Kóstka Name[hu]=Asztalkocka -Name[ia]=Cubo de Scriptorio +Name[ia]=Cubo de scriptorio Name[id]=Kubus Desktop Name[is]=Skjáborðskubbur Name[it]=Cubo dei desktop diff --git a/effects/cube/cubeslide.desktop b/effects/cube/cubeslide.desktop index 89be39ed9b..574e20829d 100644 --- a/effects/cube/cubeslide.desktop +++ b/effects/cube/cubeslide.desktop @@ -25,7 +25,7 @@ Name[he]=הנפשת שולחן עבודה בקובייה Name[hi]=डेस्कटॉप घन एनिमेशन Name[hr]=Animacija kocke s radnom površinom Name[hu]=Asztalváltó kocka -Name[ia]=Animation de Cubo de Scriptorio +Name[ia]=Animation de cubo de scriptorio Name[id]=Animasi Kubus Desktop Name[is]=Hreyfingar á skjáborðskubbi Name[it]=Animazione del cubo dei desktop @@ -87,7 +87,7 @@ Comment[gl]=Anima o troco de escritorio cunha forma cúbica Comment[he]=הנפשת מעבר בין שולחנות־עבודה על־ידי קובייה Comment[hr]=Animacija promjene radne površine na kocki Comment[hu]=Asztalváltás kocka alakzattal -Comment[ia]=Commutar scriptorio animate con un cubo +Comment[ia]=Commuta scriptorio animate con un cubo Comment[id]=Animasi penggantian desktop di dalam kubus Comment[is]=Hreyfa til skjáborðaskiptingu á kubbi Comment[it]=Anima il cambio di desktop con un cubo diff --git a/effects/cube/cubeslide_config.desktop b/effects/cube/cubeslide_config.desktop index b45c00f816..f79fe4ebd5 100644 --- a/effects/cube/cubeslide_config.desktop +++ b/effects/cube/cubeslide_config.desktop @@ -32,7 +32,7 @@ Name[he]=הנפשת שולחן עבודה בקובייה Name[hi]=डेस्कटॉप घन एनिमेशन Name[hr]=Animacija kocke s radnom površinom Name[hu]=Asztalváltó kocka -Name[ia]=Animation de Cubo de Scriptorio +Name[ia]=Animation de cubo de scriptorio Name[id]=Animasi Kubus Desktop Name[is]=Hreyfingar á skjáborðskubbi Name[it]=Animazione del cubo dei desktop diff --git a/effects/dashboard/dashboard.desktop b/effects/dashboard/dashboard.desktop index 548600f760..5ac05e6960 100644 --- a/effects/dashboard/dashboard.desktop +++ b/effects/dashboard/dashboard.desktop @@ -29,7 +29,7 @@ Name[hi]=डैशबोर्ड Name[hne]=डेशबोर्ड Name[hr]=Nadzorna ploča Name[hu]=Dashboard -Name[ia]=Pannello de Instrumentos +Name[ia]=Pannello de instrumentos Name[id]=Dasbor Name[is]=Dashboard Name[it]=Dashboard @@ -111,6 +111,7 @@ Comment[sr@ijekavianlatin]=Posivljuje površ pri pojavi instrument-table Plasme Comment[sr@latin]=Posivljuje površ pri pojavi instrument-table Plasme Comment[sv]=Försvaga skrivbordet när Plasmas instrumentpanel visas Comment[th]=ลดความอิ่มสีของพื้นที่ทำงาน เมื่อมีการแสดงแดชบอร์ดของพลาสมา +Comment[tr]=Plasma kontrol paneli gösterilirken masaüstünü solgunlaştır Comment[uk]=Зменшення насиченості кольорів стільниці під час показу панелі приладів Плазми Comment[x-test]=xxDesaturate the desktop when displaying the Plasma dashboardxx Comment[zh_TW]=顯示 Plasma 資訊看板時將桌面淡化 diff --git a/effects/dashboard/dashboard_config.desktop b/effects/dashboard/dashboard_config.desktop index 04d2b22e9a..6e27b01df1 100644 --- a/effects/dashboard/dashboard_config.desktop +++ b/effects/dashboard/dashboard_config.desktop @@ -36,7 +36,7 @@ Name[hi]=डैशबोर्ड Name[hne]=डेशबोर्ड Name[hr]=Nadzorna ploča Name[hu]=Dashboard -Name[ia]=Pannello de Instrumentos +Name[ia]=Pannello de instrumentos Name[id]=Dasbor Name[is]=Dashboard Name[it]=Dashboard diff --git a/effects/desktopgrid/desktopgrid.cpp b/effects/desktopgrid/desktopgrid.cpp index f8a12452d8..723b146d55 100644 --- a/effects/desktopgrid/desktopgrid.cpp +++ b/effects/desktopgrid/desktopgrid.cpp @@ -430,6 +430,8 @@ void DesktopGridEffect::slotWindowClosed(EffectWindow* w) void DesktopGridEffect::slotWindowDeleted(EffectWindow* w) { + if (w == windowMove) + windowMove = 0; for (QHash< DesktopButtonsView*, EffectWindow*>::iterator it = m_desktopButtonsViews.begin(); it != m_desktopButtonsViews.end(); ++it) { if (it.value() && it.value() == w) { diff --git a/effects/desktopgrid/desktopgrid.desktop b/effects/desktopgrid/desktopgrid.desktop index 6ad8d241cc..6f2616eee9 100644 --- a/effects/desktopgrid/desktopgrid.desktop +++ b/effects/desktopgrid/desktopgrid.desktop @@ -30,7 +30,7 @@ Name[hi]=डेस्कटॉप ग्रिड Name[hne]=डेस्कटाप ग्रिड Name[hr]=Mreža radne površine Name[hu]=Asztalrács -Name[ia]=Grillia de Scriptorio +Name[ia]=Grillia de scriptorio Name[id]=Petak Desktop Name[is]=Skjáborðsmöskvi Name[it]=Griglia dei Desktop diff --git a/effects/desktopgrid/desktopgrid_config.desktop b/effects/desktopgrid/desktopgrid_config.desktop index 45ce7c2f89..7450933c23 100644 --- a/effects/desktopgrid/desktopgrid_config.desktop +++ b/effects/desktopgrid/desktopgrid_config.desktop @@ -37,7 +37,7 @@ Name[hi]=डेस्कटॉप ग्रिड Name[hne]=डेस्कटाप ग्रिड Name[hr]=Mreža radne površine Name[hu]=Asztalrács -Name[ia]=Grillia de Scriptorio +Name[ia]=Grillia de scriptorio Name[id]=Petak Desktop Name[is]=Skjáborðsmöskvi Name[it]=Griglia dei Desktop diff --git a/effects/dialogparent/dialogparent.desktop b/effects/dialogparent/dialogparent.desktop index 3877cf40be..abd941984b 100644 --- a/effects/dialogparent/dialogparent.desktop +++ b/effects/dialogparent/dialogparent.desktop @@ -28,7 +28,7 @@ Name[hi]=मूल संवाद Name[hne]=मूल गोठ Name[hr]=Dialog Roditelj Name[hu]=Párbeszédablak-tartó -Name[ia]=Dialogo Genitor +Name[ia]=Dialogo genitor Name[id]=Induk Dialog Name[is]=Dekking undir valglugga Name[it]=Finestra madre diff --git a/effects/dimscreen/dimscreen.desktop b/effects/dimscreen/dimscreen.desktop index 66b25d7c7b..65cc09c410 100644 --- a/effects/dimscreen/dimscreen.desktop +++ b/effects/dimscreen/dimscreen.desktop @@ -26,7 +26,7 @@ Name[hi]=प्रबंधक मोड के लिए स्क्रीन Name[hne]=प्रसासक मोड बर स्क्रीन ल धुंधला कर देव Name[hr]=Priguši zaslon za administrativni način Name[hu]=Halványított képernyő rendszergazdai módban -Name[ia]=Schermo Dim pro Modo Administrator +Name[ia]=Schermo Dim pro modo de administrator Name[id]=Layar Dim Untuk Mode Administrator Name[is]=Dimma skjá fyrir kerfisstjóraham Name[it]=Scurisci lo schermo in modalità amministrativa diff --git a/effects/fadedesktop/fadedesktop.desktop b/effects/fadedesktop/fadedesktop.desktop index a04d8563b7..07e9797a8d 100644 --- a/effects/fadedesktop/fadedesktop.desktop +++ b/effects/fadedesktop/fadedesktop.desktop @@ -24,7 +24,7 @@ Name[gu]=ડેસ્કટોપ ઝાંખુ કરો Name[he]=חשיפה והיעלמות בין שולחנות עבודה Name[hr]=Preklapanje radnih površina Name[hu]=Elhalványuló váltás -Name[ia]=Pallidi Scriptorio +Name[ia]=Pallidi scriptorio Name[id]=Pudar Desktop Name[is]=Þynna út skjáborð Name[it]=Dissolvenza dei desktop diff --git a/effects/fallapart/fallapart.desktop b/effects/fallapart/fallapart.desktop index ae91e96673..2951c866df 100644 --- a/effects/fallapart/fallapart.desktop +++ b/effects/fallapart/fallapart.desktop @@ -26,7 +26,7 @@ Name[hi]=टूट कर गिरना Name[hne]=टूट कर गिरना Name[hr]=Raspad Name[hu]=Szétbontás -Name[ia]=Cader a pecias +Name[ia]=Cade a pecias Name[id]=Hancur Name[is]=Sundurfall Name[it]=Cadi a pezzi diff --git a/effects/flipswitch/flipswitch.cpp b/effects/flipswitch/flipswitch.cpp index 192d847914..12dddbf40f 100644 --- a/effects/flipswitch/flipswitch.cpp +++ b/effects/flipswitch/flipswitch.cpp @@ -591,6 +591,8 @@ void FlipSwitchEffect::slotWindowAdded(EffectWindow* w) void FlipSwitchEffect::slotWindowClosed(EffectWindow* w) { + if (m_selectedWindow == w) + m_selectedWindow = 0; if (m_active && m_windows.contains(w)) { m_windows.remove(w); } diff --git a/effects/flipswitch/flipswitch.desktop b/effects/flipswitch/flipswitch.desktop index bd8740e0af..f316fb381a 100644 --- a/effects/flipswitch/flipswitch.desktop +++ b/effects/flipswitch/flipswitch.desktop @@ -24,7 +24,7 @@ Name[hi]=स्विच बदलें Name[hne]=फ्लिप स्विच Name[hr]=Naslagani prozori – promjena Name[hu]=Billenős váltódoboz -Name[ia]=Commuta Colpetto (Flip) +Name[ia]=Commutator de colpetto (Flip) Name[id]=Melipat Name[is]=Flettirofi Name[it]=Scambiafinestre a pila @@ -88,7 +88,7 @@ Comment[he]=מעבר בין חלון המסודרים בערמה במעביר ה Comment[hne]=आल्ट+टेब विंडो बदलइया मं रखे विंडो ल आपस मं बदलव Comment[hr]=Prilikom promjene prozora sa alt+tab, prozori se prikazuju naslagani jedan na drugog u 3 dimenzije Comment[hu]=Halomban megjelenített ablakokkal dolgozó Alt+Tab-os ablakváltó -Comment[ia]=Colpa (Flip) fenestras que es in le stack per le commutator de fenestra alt-tab +Comment[ia]=Colpa (Flip) trans fenestras que es in le stack per le commutator de fenestra alt-tab Comment[id]=Melipat di antara jendela yang ada di tumpukan untuk pengganti jendela alt+tab Comment[is]=Flettir í gegnum stafla af gluggum í alt+tab skiptiglugganum Comment[it]=Sfoglia le finestre ordinate in pila con lo scambiafinestre Alt-Tab diff --git a/effects/flipswitch/flipswitch_config.desktop b/effects/flipswitch/flipswitch_config.desktop index b0e4404856..beb3b2aec6 100644 --- a/effects/flipswitch/flipswitch_config.desktop +++ b/effects/flipswitch/flipswitch_config.desktop @@ -31,7 +31,7 @@ Name[hi]=स्विच बदलें Name[hne]=फ्लिप स्विच Name[hr]=Naslagani prozori – promjena Name[hu]=Billenős váltódoboz -Name[ia]=Commuta Colpetto (Flip) +Name[ia]=Commutator de colpetto (Flip) Name[id]=Melipat Name[is]=Flettirofi Name[it]=Scambiafinestre a pila diff --git a/effects/glide/glide.cpp b/effects/glide/glide.cpp index 130a1fa117..c44e375a3c 100644 --- a/effects/glide/glide.cpp +++ b/effects/glide/glide.cpp @@ -234,4 +234,9 @@ GlideEffect::WindowInfo::WindowInfo() { } +GlideEffect::WindowInfo::~WindowInfo() +{ + delete timeLine; +} + } // namespace diff --git a/effects/glide/glide.desktop b/effects/glide/glide.desktop index b68d987613..dc8ad8c07a 100644 --- a/effects/glide/glide.desktop +++ b/effects/glide/glide.desktop @@ -17,7 +17,7 @@ Name[ga]=Sleamhnaigh Name[he]=גלישה Name[hi]=ग्लाइड Name[hr]=Klizanje -Name[ia]=Glissar +Name[ia]=Glissa Name[id]=Glide Name[is]=Svífa Name[it]=Plana @@ -70,7 +70,7 @@ Comment[fr]=Fait glisser les fenêtres lorsqu'elles sont ouvertes ou fermées Comment[ga]=Maisíocht Sleamhnaithe agus fuinneoga á n-oscailt agus á ndúnadh Comment[he]=אפקט גלישת חלונות בפתיחתם וסגירתם Comment[hr]=Efekt kližućih prozora dok se otvaraju i zatvaraju -Comment[ia]=Effectos de Glissar durante que illos es aperite e claudite +Comment[ia]=Effectos de glissar durante que illos es aperite e claudite Comment[id]=Efek Glid Jendela ketika jendela dibuka dan ditutup Comment[is]=Lætur glugga svífa þegar þeir eru opnaðir eða þeim er lokað Comment[it]=Effetto di planata delle finestre quando vengono aperte e chiuse diff --git a/effects/glide/glide.h b/effects/glide/glide.h index 78f0ed3d64..bb793dd3af 100644 --- a/effects/glide/glide.h +++ b/effects/glide/glide.h @@ -70,9 +70,7 @@ class GlideEffect::WindowInfo { public: WindowInfo(); - ~WindowInfo() { - delete timeLine; - } + ~WindowInfo(); bool deleted; bool added; bool closed; diff --git a/effects/glide/glide_config.desktop b/effects/glide/glide_config.desktop index 98a2090408..03459c63a0 100644 --- a/effects/glide/glide_config.desktop +++ b/effects/glide/glide_config.desktop @@ -24,7 +24,7 @@ Name[ga]=Sleamhnaigh Name[he]=גלישה Name[hi]=ग्लाइड Name[hr]=Klizanje -Name[ia]=Glissar +Name[ia]=Glissa Name[id]=Glide Name[is]=Svífa Name[it]=Plana diff --git a/effects/highlightwindow/highlightwindow.desktop b/effects/highlightwindow/highlightwindow.desktop index 36df8ccd20..0419ae6a0a 100644 --- a/effects/highlightwindow/highlightwindow.desktop +++ b/effects/highlightwindow/highlightwindow.desktop @@ -25,7 +25,7 @@ Name[he]=הבלטת חלון Name[hi]=अनुकृति विंडो Name[hr]=Označi prozor Name[hu]=Ablakkiemelés -Name[ia]=Fenestra Evidentiate +Name[ia]=Evidentia fenestra Name[id]=Sorot Jendela Name[is]=Ljóma glugga Name[it]=Evidenzia la finestra diff --git a/effects/login/login.desktop b/effects/login/login.desktop index ff9b981859..7c9757c6ee 100644 --- a/effects/login/login.desktop +++ b/effects/login/login.desktop @@ -32,7 +32,7 @@ Name[hne]=लागइन Name[hr]=Prijava Name[hsb]=Přizjewjenje Name[hu]=Bejelentkezés -Name[ia]=Accesso +Name[ia]=Accesso de identification Name[id]=Log Masuk Name[is]=Innskráning Name[it]=Accesso @@ -107,7 +107,7 @@ Comment[he]=עמעום המסך בהדרגה בעת הכניסה למערכת Comment[hne]=जब लागइन होथे तब डेस्कटाप मं धीरे से फेड होथे Comment[hr]=Lagano pojavljivanje radne površine prilikom prijave na sustav Comment[hu]=Folyamatos átmenet az asztalra bejelentkezéskor -Comment[ia]=Dulcemente pallidi le scriptorio quando tu accede +Comment[ia]=Dulcemente pallidi le scriptorio quando tu accede in identification Comment[id]=Memudar dengan halus ke desktop ketika log masuk Comment[is]=Láta skjáborð koma mjúklega í ljós við innstimplun Comment[it]=Dissolvenza graduale del desktop all'accesso diff --git a/effects/magiclamp/magiclamp.desktop b/effects/magiclamp/magiclamp.desktop index 6988dfbbcb..9312ab10ed 100644 --- a/effects/magiclamp/magiclamp.desktop +++ b/effects/magiclamp/magiclamp.desktop @@ -97,7 +97,7 @@ Comment[hi]=जब विंडो न्यूनतम किया जा र Comment[hne]=जब विंडो ल सबसे कम करथे तब एक जादू के बत्ती देखाथे Comment[hr]=Simulacija čarobne svjetiljke prilikom minimizacije prozora Comment[hu]=Az ablakok minimalizálása varázslámpás animáció kíséretében történik -Comment[ia]=Simula un lampa magic quando minimiza fenestras +Comment[ia]=Simula un lampa magic quando minimisa fenestras Comment[id]=Simulasikan sebuah lampu ajaib ketika meminimalkan jendela Comment[is]=Líkir eftir töfralampa við lágmörkun glugga Comment[it]=Simula una lampada magica nella minimizzazione delle finestre diff --git a/effects/magnifier/magnifier.desktop b/effects/magnifier/magnifier.desktop index 43702cc2e1..eb4d845187 100644 --- a/effects/magnifier/magnifier.desktop +++ b/effects/magnifier/magnifier.desktop @@ -110,7 +110,7 @@ Comment[hi]=माउस संकेतक के चारों ओर का Comment[hne]=मुसुवा के आसपास के स्क्रीन जगह ल आवर्धित करथे Comment[hr]=Povećanje dijela ekrana koji je blizu pokazivača miša Comment[hu]=Felnagyítja az egérmutató alatti területet -Comment[ia]=Aggrandir le section del schermo que es vicin al cursor del mus +Comment[ia]=Aggrandi le section del schermo que es vicin al cursor del mus Comment[id]=Besarkan bagian layar yang dekat dengan kursor tetikus Comment[is]=Stækkar þann hluta skjásins sem er undir músarbendlinum Comment[it]=Ingrandisce la parte dello schermo vicina al cursore del mouse diff --git a/effects/minimizeanimation/minimizeanimation.desktop b/effects/minimizeanimation/minimizeanimation.desktop index 0f697d8a22..4fd2e6b736 100644 --- a/effects/minimizeanimation/minimizeanimation.desktop +++ b/effects/minimizeanimation/minimizeanimation.desktop @@ -30,7 +30,7 @@ Name[hi]=न्यूनतम करने पर एनीमेशन Name[hne]=छोटी करे समय एनीमेसन Name[hr]=Animacija minimizacije Name[hu]=Animáció minimalizáláskor -Name[ia]=Animation de Minimisar +Name[ia]=Animation de minimisar Name[id]=Animasi Meminimalkan Name[is]=Hreyfingar við lágmörkun Name[it]=Animazione di minimizzazione diff --git a/effects/mousemark/mousemark.desktop b/effects/mousemark/mousemark.desktop index f89b34a903..4950c2257f 100644 --- a/effects/mousemark/mousemark.desktop +++ b/effects/mousemark/mousemark.desktop @@ -30,7 +30,7 @@ Name[hi]=माउस मार्क Name[hne]=मुसुवा चिनहा Name[hr]=Oznaka miša Name[hu]=Egérnyom -Name[ia]=Marca de Mus +Name[ia]=Marca de mus Name[id]=Tanda Tetikus Name[is]=Músarspor Name[it]=Pennarello diff --git a/effects/mousemark/mousemark_config.desktop b/effects/mousemark/mousemark_config.desktop index 6062677be4..711f9aa45c 100644 --- a/effects/mousemark/mousemark_config.desktop +++ b/effects/mousemark/mousemark_config.desktop @@ -37,7 +37,7 @@ Name[hi]=माउस मार्क Name[hne]=मुसुवा चिनहा Name[hr]=Oznaka miša Name[hu]=Egérnyom -Name[ia]=Marca de Mus +Name[ia]=Marca de mus Name[id]=Tanda Tetikus Name[is]=Músarspor Name[it]=Pennarello diff --git a/effects/presentwindows/presentwindows.cpp b/effects/presentwindows/presentwindows.cpp index 4d06906002..816e4a5e22 100644 --- a/effects/presentwindows/presentwindows.cpp +++ b/effects/presentwindows/presentwindows.cpp @@ -257,42 +257,47 @@ void PresentWindowsEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &d { // TODO: We should also check to see if any windows are fading just in case fading takes longer // than moving the windows when the effect is deactivated. - if ((m_activated || m_motionManager.areWindowsMoving()) && m_windowData.contains(w)) { + if (m_activated || m_motionManager.areWindowsMoving()) { + DataHash::iterator winData = m_windowData.find(w); + if (winData == m_windowData.end()) { + effects->prePaintWindow(w, data, time); + return; + } w->enablePainting(EffectWindow::PAINT_DISABLED_BY_MINIMIZE); // Display always w->enablePainting(EffectWindow::PAINT_DISABLED_BY_DESKTOP); - if (m_windowData[w].visible) + if (winData->visible) w->enablePainting(EffectWindow::PAINT_DISABLED_BY_CLIENT_GROUP); // Calculate window's opacity // TODO: Minimized windows or windows not on the current desktop are only 75% visible? - if (m_windowData[w].visible) { - if (m_windowData[w].deleted) - m_windowData[w].opacity = qMax(0.0, m_windowData[w].opacity - time / m_fadeDuration); + if (winData->visible) { + if (winData->deleted) + winData->opacity = qMax(0.0, winData->opacity - time / m_fadeDuration); else - m_windowData[w].opacity = qMin(/*( w->isMinimized() || !w->isOnCurrentDesktop() ) ? 0.75 :*/ 1.0, - m_windowData[w].opacity + time / m_fadeDuration); + winData->opacity = qMin(/*(w->isMinimized() || !w->isOnCurrentDesktop()) ? 0.75 :*/ 1.0, + winData->opacity + time / m_fadeDuration); } else - m_windowData[w].opacity = qMax(0.0, m_windowData[w].opacity - time / m_fadeDuration); - if (m_windowData[w].opacity == 0.0) { + winData->opacity = qMax(0.0, winData->opacity - time / m_fadeDuration); + if (winData->opacity <= 0.0) { // don't disable painting for panels if show panel is set - if (!w->isDock() || (w->isDock() && !m_showPanel)) + if (!(m_showPanel && w->isDock())) w->disablePainting(EffectWindow::PAINT_DISABLED); - } else if (m_windowData[w].opacity != 1.0) + } else if (winData->opacity != 1.0) data.setTranslucent(); // Calculate window's brightness if (w == m_highlightedWindow || w == m_closeWindow || !m_activated) - m_windowData[w].highlight = qMin(1.0, m_windowData[w].highlight + time / m_fadeDuration); + winData->highlight = qMin(1.0, winData->highlight + time / m_fadeDuration); else - m_windowData[w].highlight = qMax(0.0, m_windowData[w].highlight - time / m_fadeDuration); + winData->highlight = qMax(0.0, winData->highlight - time / m_fadeDuration); // Closed windows - if (m_windowData[w].deleted) { + if (winData->deleted) { data.setTranslucent(); - if (m_windowData[w].opacity <= 0.0 && m_windowData[w].referenced) { + if (winData->opacity <= 0.0 && winData->referenced) { // it's possible that another effect has referenced the window // we have to keep the window in the list to prevent flickering - m_windowData[w].referenced = false; + winData->referenced = false; w->unrefWindow(); } else w->enablePainting(EffectWindow::PAINT_DISABLED_BY_DELETE); @@ -310,16 +315,17 @@ void PresentWindowsEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &d void PresentWindowsEffect::paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data) { - if ((m_activated || m_motionManager.areWindowsMoving()) && m_windowData.contains(w)) { - if (w->isDock() && m_showPanel) { + if (m_activated || m_motionManager.areWindowsMoving()) { + DataHash::const_iterator winData = m_windowData.constFind(w); + if (winData == m_windowData.constEnd() || (w->isDock() && m_showPanel)) { // in case the panel should be shown just display it without any changes effects->paintWindow(w, mask, region, data); return; } // Apply opacity and brightness - data.opacity *= m_windowData[w].opacity; - data.brightness *= interpolate(0.7, 1.0, m_windowData[w].highlight); + data.opacity *= winData->opacity; + data.brightness *= interpolate(0.7, 1.0, winData->highlight); if (m_motionManager.isManaging(w)) { m_motionManager.apply(w, data); @@ -333,7 +339,7 @@ void PresentWindowsEffect::paintWindow(EffectWindow *w, int mask, QRegion region if (m_showIcons) { QPoint point(rect.x() + rect.width() * 0.95, rect.y() + rect.height() * 0.95); - m_windowData[w].iconFrame->setPosition(point); + winData->iconFrame->setPosition(point); #ifdef KWIN_HAVE_OPENGL_COMPOSITING if (effects->compositingType() == KWin::OpenGLCompositing && data.shader) { const float a = 0.9 * data.opacity * m_decalOpacity * 0.75; @@ -342,12 +348,12 @@ void PresentWindowsEffect::paintWindow(EffectWindow *w, int mask, QRegion region data.shader->setUniform(GLShader::ModulationConstant, QVector4D(a, a, a, a)); } #endif - m_windowData[w].iconFrame->render(region, 0.9 * data.opacity * m_decalOpacity, 0.75); + winData->iconFrame->render(region, 0.9 * data.opacity * m_decalOpacity, 0.75); } if (m_showCaptions) { QPoint point(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); - m_windowData[w].textFrame->setPosition(point); + winData->textFrame->setPosition(point); #ifdef KWIN_HAVE_OPENGL_COMPOSITING if (effects->compositingType() == KWin::OpenGLCompositing && data.shader) { const float a = 0.9 * data.opacity * m_decalOpacity * 0.75; @@ -356,7 +362,7 @@ void PresentWindowsEffect::paintWindow(EffectWindow *w, int mask, QRegion region data.shader->setUniform(GLShader::ModulationConstant, QVector4D(a, a, a, a)); } #endif - m_windowData[w].textFrame->render(region, 0.9 * data.opacity * m_decalOpacity, 0.75); + winData->textFrame->render(region, 0.9 * data.opacity * m_decalOpacity, 0.75); } } else effects->paintWindow(w, mask, region, data); @@ -371,24 +377,25 @@ void PresentWindowsEffect::slotWindowAdded(EffectWindow *w) { if (!m_activated) return; - m_windowData[w].visible = isVisibleWindow(w); - m_windowData[w].opacity = 0.0; - m_windowData[w].highlight = 0.0; - m_windowData[w].textFrame = effects->effectFrame(EffectFrameUnstyled, false); + WindowData *winData = &m_windowData[w]; + winData->visible = isVisibleWindow(w); + winData->opacity = 0.0; + winData->highlight = 0.0; + winData->textFrame = effects->effectFrame(EffectFrameUnstyled, false); QFont font; font.setBold(true); font.setPointSize(12); - m_windowData[w].textFrame->setFont(font); - m_windowData[w].iconFrame = effects->effectFrame(EffectFrameUnstyled, false); - m_windowData[w].iconFrame->setAlignment(Qt::AlignRight | Qt::AlignBottom); - m_windowData[w].iconFrame->setIcon(w->icon()); + winData->textFrame->setFont(font); + winData->iconFrame = effects->effectFrame(EffectFrameUnstyled, false); + winData->iconFrame->setAlignment(Qt::AlignRight | Qt::AlignBottom); + winData->iconFrame->setIcon(w->icon()); if (isSelectableWindow(w)) { m_motionManager.manage(w); rearrangeWindows(); } if (w == effects->findWindow(m_closeView->winId())) { - m_windowData[w].visible = true; - m_windowData[w].highlight = 1.0; + winData->visible = true; + winData->highlight = 1.0; m_closeWindow = w; w->setData(WindowForceBlurRole, QVariant(true)); } @@ -398,10 +405,11 @@ void PresentWindowsEffect::slotWindowClosed(EffectWindow *w) { if (m_managerWindow == w) m_managerWindow = NULL; - if (!m_windowData.contains(w)) + DataHash::iterator winData = m_windowData.find(w); + if (winData == m_windowData.end()) return; - m_windowData[w].deleted = true; - m_windowData[w].referenced = true; + winData->deleted = true; + winData->referenced = true; w->refWindow(); if (m_highlightedWindow == w) setHighlightedWindow(findFirstWindow()); @@ -411,8 +419,8 @@ void PresentWindowsEffect::slotWindowClosed(EffectWindow *w) } rearrangeWindows(); - foreach (EffectWindow * w, m_motionManager.managedWindows()) { - DataHash::iterator winData = m_windowData.find( w ); + foreach (EffectWindow *w, m_motionManager.managedWindows()) { + winData = m_windowData.find(w); if (winData != m_windowData.end() && !winData->deleted) return; // found one that is not deleted? then we go on } @@ -421,11 +429,12 @@ void PresentWindowsEffect::slotWindowClosed(EffectWindow *w) void PresentWindowsEffect::slotWindowDeleted(EffectWindow *w) { - if (!m_windowData.contains(w)) + DataHash::iterator winData = m_windowData.find(w); + if (winData == m_windowData.end()) return; - delete m_windowData[w].textFrame; - delete m_windowData[w].iconFrame; - m_windowData.remove(w); + delete winData->textFrame; + delete winData->iconFrame; + m_windowData.erase(winData); m_motionManager.unmanage(w); } @@ -474,10 +483,12 @@ void PresentWindowsEffect::windowInputMouseEvent(Window w, QEvent *e) // We cannot use m_motionManager.windowAtPoint() as the window might not be visible EffectWindowList windows = m_motionManager.managedWindows(); bool hovering = false; - for (int i = 0; i < windows.size(); i++) { - assert(m_windowData.contains(windows.at(i))); + for (int i = 0; i < windows.size(); ++i) { + DataHash::const_iterator winData = m_windowData.constFind(windows.at(i)); + if (winData == m_windowData.constEnd()) + continue; if (m_motionManager.transformedGeometry(windows.at(i)).contains(cursorPos()) && - m_windowData[windows.at(i)].visible && !m_windowData[windows.at(i)].deleted) { + winData->visible && !winData->deleted) { hovering = true; if (windows.at(i) && m_highlightedWindow != windows.at(i)) setHighlightedWindow(windows.at(i)); @@ -844,26 +855,26 @@ void PresentWindowsEffect::rearrangeWindows() else windowlist = m_motionManager.managedWindows(); foreach (EffectWindow * w, m_motionManager.managedWindows()) { - if (m_windowData[w].deleted) + DataHash::iterator winData = m_windowData.find(w); + if (winData == m_windowData.end() || winData->deleted) continue; // don't include closed windows windowlists[w->screen()].append(w); - assert(m_windowData.contains(w)); - m_windowData[w].visible = true; + winData->visible = true; } } else { // Can we move this filtering somewhere else? foreach (EffectWindow * w, m_motionManager.managedWindows()) { - assert(m_windowData.contains(w)); - if (m_windowData[w].deleted) + DataHash::iterator winData = m_windowData.find(w); + if (winData == m_windowData.end() || winData->deleted) continue; // don't include closed windows if (w->caption().contains(m_windowFilter, Qt::CaseInsensitive) || w->windowClass().contains(m_windowFilter, Qt::CaseInsensitive) || w->windowRole().contains(m_windowFilter, Qt::CaseInsensitive)) { windowlist.append(w); windowlists[w->screen()].append(w); - m_windowData[w].visible = true; + winData->visible = true; } else - m_windowData[w].visible = false; + winData->visible = false; } } if (windowlist.isEmpty()) { @@ -873,8 +884,8 @@ void PresentWindowsEffect::rearrangeWindows() // We filtered out the highlighted window if (m_highlightedWindow) { - assert(m_windowData.contains(m_highlightedWindow)); - if (m_windowData[m_highlightedWindow].visible == false) + DataHash::iterator winData = m_windowData.find(m_highlightedWindow); + if (winData != m_windowData.end() && !winData->visible) setHighlightedWindow(findFirstWindow()); } else if (m_tabBoxEnabled) setHighlightedWindow(effects->currentTabBoxWindow()); @@ -911,12 +922,15 @@ void PresentWindowsEffect::rearrangeWindows() // Resize text frames if required QFontMetrics* metrics = NULL; // All fonts are the same foreach (EffectWindow * w, m_motionManager.managedWindows()) { + DataHash::iterator winData = m_windowData.find(w); + if (winData == m_windowData.end()) + continue; if (!metrics) - metrics = new QFontMetrics(m_windowData[w].textFrame->font()); + metrics = new QFontMetrics(winData->textFrame->font()); QRect geom = m_motionManager.targetGeometry(w).toRect(); QString string = metrics->elidedText(w->caption(), Qt::ElideRight, geom.width() * 0.9); - if (string != m_windowData[w].textFrame->text()) - m_windowData[w].textFrame->setText(string); + if (string != winData->textFrame->text()) + winData->textFrame->setText(string); } delete metrics; } @@ -936,6 +950,13 @@ void PresentWindowsEffect::calculateWindowTransformations(EffectWindowList windo m_windowData.clear(); } +static inline int distance(QPoint &pos1, QPoint &pos2) +{ + const int xdiff = pos1.x() - pos2.x(); + const int ydiff = pos1.y() - pos2.y(); + return int(sqrt(float(xdiff*xdiff + ydiff*ydiff))); +} + void PresentWindowsEffect::calculateWindowTransformationsClosest(EffectWindowList windowlist, int screen, WindowMotionManager& motionManager) { @@ -957,43 +978,68 @@ void PresentWindowsEffect::calculateWindowTransformationsClosest(EffectWindowLis } // Assign slots - foreach (EffectWindow * w, windowlist) - m_windowData[w].slot = -1; + int slotWidth = area.width() / columns; + int slotHeight = area.height() / rows; + QVector takenSlots; + takenSlots.resize(rows*columns); + takenSlots.fill(0); + if (m_tabBoxEnabled) { // Rearrange in the correct order. As rearrangeWindows() is only ever // called once so we can use effects->currentTabBoxWindow() here. int selectedWindow = qMax(0, windowlist.indexOf(effects->currentTabBoxWindow())); - int slot = 0; - for (int i = selectedWindow; i < windowlist.count(); i++) - m_windowData[windowlist[i]].slot = slot++; - for (int i = selectedWindow - 1; i >= 0; i--) - m_windowData[windowlist[i]].slot = slot++; + int j = 0; + for (int i = selectedWindow; i < windowlist.count(); ++i) + takenSlots[j++] = windowlist[i]; + for (int i = selectedWindow - 1; i >= 0; --i) + takenSlots[j++] = windowlist[i]; } else { - for (;;) { - // Assign each window to the closest available slot - assignSlots(windowlist, area, columns, rows); - // Leave only the closest window in each slot, remove further conflicts - getBestAssignments(windowlist); - bool allAssigned = true; - foreach (EffectWindow * w, windowlist) - if (m_windowData[w].slot == -1) { - allAssigned = false; - break; + + // precalculate all slot centers + QVector slotCenters; + slotCenters.resize(rows*columns); + for (int x = 0; x < columns; ++x) + for (int y = 0; y < rows; ++y) { + slotCenters[x + y*columns] = QPoint(area.x() + slotWidth * x + slotWidth / 2, + area.y() + slotHeight * y + slotHeight / 2); } - if (allAssigned) - break; + + // Assign each window to the closest available slot + EffectWindowList tmpList = windowlist; // use a QLinkedList copy instead? + QPoint otherPos; + while (!tmpList.isEmpty()) { + EffectWindow *w = tmpList.first(); + int slotCandidate = -1, slotCandidateDistance = INT_MAX; + QPoint pos = w->geometry().center(); + for (int i = 0; i < columns*rows; ++i) { // all slots + const int dist = distance(pos, slotCenters[i]); + if (dist < slotCandidateDistance) { // window is interested in this slot + EffectWindow *occupier = takenSlots[i]; + assert(occupier != w); + if (!occupier || dist < distance((otherPos = occupier->geometry().center()), slotCenters[i])) { + // either nobody lives here, or we're better - takeover the slot if it's our best + slotCandidate = i; + slotCandidateDistance = dist; + } + } + } + assert(slotCandidate != -1); + if (takenSlots[slotCandidate]) + tmpList << takenSlots[slotCandidate]; // occupier needs a new home now :p + tmpList.removeAll(w); + takenSlots[slotCandidate] = w; // ...and we rumble in =) } } - int slotWidth = area.width() / columns; - int slotHeight = area.height() / rows; - foreach (EffectWindow * w, windowlist) { - assert(m_windowData[w].slot != -1); + for (int slot = 0; slot < columns*rows; ++slot) { + EffectWindow *w = takenSlots[slot]; + if (!w) // some slots might be empty + continue; // Work out where the slot is QRect target( - area.x() + (m_windowData[w].slot % columns) * slotWidth, - area.y() + (m_windowData[w].slot / columns) * slotHeight, + area.x() + (slot % columns) * slotWidth, + area.y() + (slot / columns) * slotHeight, slotWidth, slotHeight); target.adjust(10, 10, -10, -10); // Borders double scale; @@ -1142,7 +1188,10 @@ void PresentWindowsEffect::calculateWindowTransformationsKompose(EffectWindowLis EffectWindow* window = windowlist[pos]; QRect target = geometryRects[pos]; target.setY(target.y() + topOffset); - m_windowData[window].slot = pos; + // @Marrtin: any idea what this is good for? +// DataHash::iterator winData = m_windowData.find(window); +// if (winData != m_windowData.end()) +// winData->slot = pos; motionManager.moveWindow(window, target); //kDebug(1212) << "Window '" << window->caption() << "' gets moved to (" << @@ -1161,8 +1210,8 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis // just have a single window on a Xinerama screen or have two windows that do not touch. // TODO: Work out why this happens, is most likely a bug in the manager. foreach (EffectWindow * w, windowlist) - if (motionManager.transformedGeometry(w) == w->geometry()) - motionManager.reset(w); + if (motionManager.transformedGeometry(w) == w->geometry()) + motionManager.reset(w); if (windowlist.count() == 1) { // Just move the window to its original location to save time @@ -1200,26 +1249,29 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis do { overlap = false; foreach (EffectWindow * w, windowlist) { + QRect *target_w = &targets[w]; foreach (EffectWindow * e, windowlist) { - if (w != e && targets[w].adjusted(-5, -5, 5, 5).intersects( - targets[e].adjusted(-5, -5, 5, 5))) { + if (w == e) + continue; + QRect *target_e = &targets[e]; + if (target_w->adjusted(-5, -5, 5, 5).intersects(target_e->adjusted(-5, -5, 5, 5))) { overlap = true; // Determine pushing direction - QPoint diff(targets[e].center() - targets[w].center()); + QPoint diff(target_e->center() - target_w->center()); // Prevent dividing by zero and non-movement if (diff.x() == 0 && diff.y() == 0) diff.setX(1); // Try to keep screen aspect ratio - //if ( bounds.height() / bounds.width() > area.height() / area.width() ) - // diff.setY( diff.y() / 2 ); + //if (bounds.height() / bounds.width() > area.height() / area.width()) + // diff.setY(diff.y() / 2); //else - // diff.setX( diff.x() / 2 ); + // diff.setX(diff.x() / 2); // Approximate a vector of between 10px and 20px in magnitude in the same direction diff *= m_accuracy / double(diff.manhattanLength()); // Move both windows apart - targets[w].translate(-diff); - targets[e].translate(diff); + target_w->translate(-diff); + target_e->translate(diff); // Try to keep the bounding rect the same aspect as the screen so that more // screen real estate is utilised. We do this by splitting the screen into nine @@ -1231,8 +1283,8 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis // in some situations. We need to do this even when expanding later just in case // all windows are the same size. // (We are using an old bounding rect for this, hopefully it doesn't matter) - int xSection = (targets[w].x() - bounds.x()) / (bounds.width() / 3); - int ySection = (targets[w].y() - bounds.y()) / (bounds.height() / 3); + int xSection = (target_w->x() - bounds.x()) / (bounds.width() / 3); + int ySection = (target_w->y() - bounds.y()) / (bounds.height() / 3); diff = QPoint(0, 0); if (xSection != 1 || ySection != 1) { // Remove this if you want the center to pull as well if (xSection == 1) @@ -1241,21 +1293,21 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis ySection = (directions[w] % 2 ? 2 : 0); } if (xSection == 0 && ySection == 0) - diff = QPoint(bounds.topLeft() - targets[w].center()); + diff = QPoint(bounds.topLeft() - target_w->center()); if (xSection == 2 && ySection == 0) - diff = QPoint(bounds.topRight() - targets[w].center()); + diff = QPoint(bounds.topRight() - target_w->center()); if (xSection == 2 && ySection == 2) - diff = QPoint(bounds.bottomRight() - targets[w].center()); + diff = QPoint(bounds.bottomRight() - target_w->center()); if (xSection == 0 && ySection == 2) - diff = QPoint(bounds.bottomLeft() - targets[w].center()); + diff = QPoint(bounds.bottomLeft() - target_w->center()); if (diff.x() != 0 || diff.y() != 0) { diff *= m_accuracy / double(diff.manhattanLength()); - targets[w].translate(diff); + target_w->translate(diff); } // Update bounding rect - bounds = bounds.united(targets[w]); - bounds = bounds.united(targets[e]); + bounds = bounds.united(*target_w); + bounds = bounds.united(*target_e); } } } @@ -1279,13 +1331,15 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis ); // Move all windows back onto the screen and set their scale - foreach (EffectWindow * w, windowlist) - targets[w] = QRect( - (targets[w].x() - bounds.x()) * scale + area.x(), - (targets[w].y() - bounds.y()) * scale + area.y(), - targets[w].width() * scale, - targets[w].height() * scale - ); + QHash::iterator target = targets.begin(); + while (target != targets.end()) { + target->setRect((target->x() - bounds.x()) * scale + area.x(), + (target->y() - bounds.y()) * scale + area.y(), + target->width() * scale, + target->height() * scale + ); + ++target; + } // Try to fill the gaps by enlarging windows if they have the space if (m_fillGaps) { @@ -1298,61 +1352,61 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis moved = false; foreach (EffectWindow * w, windowlist) { QRect oldRect; + QRect *target = &targets[w]; // This may cause some slight distortion if the windows are enlarged a large amount int widthDiff = m_accuracy; - int heightDiff = heightForWidth(w, targets[w].width() + widthDiff) - targets[w].height(); + int heightDiff = heightForWidth(w, target->width() + widthDiff) - target->height(); int xDiff = widthDiff / 2; // Also move a bit in the direction of the enlarge, allows the int yDiff = heightDiff / 2; // center windows to be enlarged if there is gaps on the side. // Attempt enlarging to the top-right - oldRect = targets[w]; - targets[w] = QRect( - targets[w].x() + xDiff, - targets[w].y() - yDiff - heightDiff, - targets[w].width() + widthDiff, - targets[w].height() + heightDiff - ); + oldRect = *target; + target->setRect(target->x() + xDiff, + target->y() - yDiff - heightDiff, + target->width() + widthDiff, + target->height() + heightDiff + ); if (isOverlappingAny(w, targets, borderRegion)) - targets[w] = oldRect; + *target = oldRect; else moved = true; // Attempt enlarging to the bottom-right - oldRect = targets[w]; - targets[w] = QRect( - targets[w].x() + xDiff, - targets[w].y() + yDiff, - targets[w].width() + widthDiff, - targets[w].height() + heightDiff + oldRect = *target; + target->setRect( + target->x() + xDiff, + target->y() + yDiff, + target->width() + widthDiff, + target->height() + heightDiff ); if (isOverlappingAny(w, targets, borderRegion)) - targets[w] = oldRect; + *target = oldRect; else moved = true; // Attempt enlarging to the bottom-left - oldRect = targets[w]; - targets[w] = QRect( - targets[w].x() - xDiff - widthDiff, - targets[w].y() + yDiff, - targets[w].width() + widthDiff, - targets[w].height() + heightDiff + oldRect = *target; + target->setRect( + target->x() - xDiff - widthDiff, + target->y() + yDiff, + target->width() + widthDiff, + target->height() + heightDiff ); if (isOverlappingAny(w, targets, borderRegion)) - targets[w] = oldRect; + *target = oldRect; else moved = true; // Attempt enlarging to the top-left - oldRect = targets[w]; - targets[w] = QRect( - targets[w].x() - xDiff - widthDiff, - targets[w].y() - yDiff - heightDiff, - targets[w].width() + widthDiff, - targets[w].height() + heightDiff + oldRect = *target; + target->setRect( + target->x() - xDiff - widthDiff, + target->y() - yDiff - heightDiff, + target->width() + widthDiff, + target->height() + heightDiff ); if (isOverlappingAny(w, targets, borderRegion)) - targets[w] = oldRect; + *target = oldRect; else moved = true; } @@ -1362,12 +1416,13 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis // We can't add this to the loop above as it would cause a never-ending loop so we have to make // do with the less-than-optimal space usage with using this method. foreach (EffectWindow * w, windowlist) { - double scale = targets[w].width() / double(w->width()); + QRect *target = &targets[w]; + double scale = target->width() / double(w->width()); if (scale > 2.0 || (scale > 1.0 && (w->width() > 300 || w->height() > 300))) { scale = (w->width() > 300 || w->height() > 300) ? 1.0 : 2.0; - targets[w] = QRect( - targets[w].center().x() - int(w->width() * scale) / 2, - targets[w].center().y() - int(w->height() * scale) / 2, + target->setRect( + target->center().x() - int(w->width() * scale) / 2, + target->center().y() - int(w->height() * scale) / 2, w->width() * scale, w->height() * scale); } @@ -1376,76 +1431,23 @@ void PresentWindowsEffect::calculateWindowTransformationsNatural(EffectWindowLis // Notify the motion manager of the targets foreach (EffectWindow * w, windowlist) - motionManager.moveWindow(w, targets[w]); + motionManager.moveWindow(w, targets.value(w)); } -//----------------------------------------------------------------------------- -// Helper functions for window rearranging - -void PresentWindowsEffect::assignSlots(EffectWindowList windowlist, const QRect &area, int columns, int rows) -{ - QVector< bool > taken; - taken.fill(false, columns * rows); - foreach (EffectWindow * w, windowlist) - if (m_windowData[w].slot != -1) - taken[ m_windowData[w].slot ] = true; - int slotWidth = area.width() / columns; - int slotHeight = area.height() / rows; - foreach (EffectWindow * w, windowlist) { - WindowData *wData = &m_windowData[w]; - if (wData->slot != -1) - continue; // it already has a slot - QPoint pos = w->geometry().center(); - if (pos.x() < area.left()) - pos.setX(area.left()); - if (pos.x() > area.right()) - pos.setX(area.right()); - if (pos.y() < area.top()) - pos.setY(area.top()); - if (pos.y() > area.bottom()) - pos.setY(area.bottom()); - int distance = INT_MAX; - for (int x = 0; x < columns; x++) - for (int y = 0; y < rows; y++) { - int slot = x + y * columns; - if (taken[slot]) - continue; - int xdiff = pos.x() - (area.x() + slotWidth * x + slotWidth / 2); - int ydiff = pos.y() - (area.y() + slotHeight * y + slotHeight / 2); - int dist = int(sqrt(double(xdiff * xdiff + ydiff * ydiff))); - if (dist < distance) { - distance = dist; - wData->slot = slot; - wData->slot_distance = distance; - } - } - } -} - -void PresentWindowsEffect::getBestAssignments(EffectWindowList windowlist) -{ - foreach (EffectWindow * w1, windowlist) { - WindowData *windowData1 = &m_windowData[w1]; - foreach (EffectWindow * w2, windowlist) { - WindowData *windowData2 = &m_windowData[w2]; - if (w1 != w2 && windowData1->slot == windowData2->slot && - windowData1->slot_distance >= windowData2->slot_distance) - windowData1->slot = -1; - } - } -} bool PresentWindowsEffect::isOverlappingAny(EffectWindow *w, const QHash &targets, const QRegion &border) { - if (border.intersects(targets[w])) + QHash::const_iterator winTarget = targets.find(w); + if (winTarget == targets.constEnd()) + return false; + if (border.intersects(*winTarget)) return true; // Is there a better way to do this? - QHash::const_iterator i; - for (i = targets.constBegin(); i != targets.constEnd(); ++i) { - if (w == i.key()) + QHash::const_iterator target; + for (target = targets.constBegin(); target != targets.constEnd(); ++target) { + if (target == winTarget) continue; - if (targets[w].adjusted(-5, -5, 5, 5).intersects( - i.value().adjusted(-5, -5, 5, 5))) + if (winTarget->adjusted(-5, -5, 5, 5).intersects(target->adjusted(-5, -5, 5, 5))) return true; } return false; @@ -1475,37 +1477,44 @@ void PresentWindowsEffect::setActive(bool active, bool closingTab) // Add every single window to m_windowData (Just calling [w] creates it) foreach (EffectWindow * w, effects->stackingOrder()) { - if (m_windowData.contains(w)) // Happens if we reactivate before the ending animation finishes - continue; - m_windowData[w].visible = isVisibleWindow(w); - m_windowData[w].deleted = false; - m_windowData[w].referenced = false; - m_windowData[w].opacity = 0.0; + DataHash::iterator winData; + if ((winData = m_windowData.find(w)) != m_windowData.end()) { + winData->visible = isVisibleWindow(w); + continue; // Happens if we reactivate before the ending animation finishes + } + winData = m_windowData.insert(w, WindowData()); + winData->visible = isVisibleWindow(w); + winData->deleted = false; + winData->referenced = false; + winData->opacity = 0.0; if (w->isOnCurrentDesktop() && !w->isMinimized()) - m_windowData[w].opacity = 1.0; - m_windowData[w].highlight = 1.0; - m_windowData[w].textFrame = effects->effectFrame(EffectFrameUnstyled, false); + winData->opacity = 1.0; + winData->highlight = 1.0; + winData->textFrame = effects->effectFrame(EffectFrameUnstyled, false); QFont font; font.setBold(true); font.setPointSize(12); - m_windowData[w].textFrame->setFont(font); - m_windowData[w].iconFrame = effects->effectFrame(EffectFrameUnstyled, false); - m_windowData[w].iconFrame->setAlignment(Qt::AlignRight | Qt::AlignBottom); - m_windowData[w].iconFrame->setIcon(w->icon()); + winData->textFrame->setFont(font); + winData->iconFrame = effects->effectFrame(EffectFrameUnstyled, false); + winData->iconFrame->setAlignment(Qt::AlignRight | Qt::AlignBottom); + winData->iconFrame->setIcon(w->icon()); } if (m_tabBoxEnabled) { + DataHash::iterator winData; foreach (EffectWindow * w, effects->currentTabBoxWindowList()) { if (!w) continue; m_motionManager.manage(w); - assert(m_windowData.contains(w)); - m_windowData[w].visible = effects->currentTabBoxWindowList().contains(w); + if ((winData = m_windowData.find(w)) != m_windowData.end()) + winData->visible = effects->currentTabBoxWindowList().contains(w); } // Hide windows not in the list - foreach (EffectWindow * w, effects->stackingOrder()) - m_windowData[w].visible = isVisibleWindow(w) && - (!isSelectableWindow(w) || effects->currentTabBoxWindowList().contains(w)); + foreach (EffectWindow * w, effects->stackingOrder()) { + if ((winData = m_windowData.find(w)) != m_windowData.end()) + winData->visible = isVisibleWindow(w) && + (!isSelectableWindow(w) || effects->currentTabBoxWindowList().contains(w)); + } } else { // Filter out special windows such as panels and taskbars foreach (EffectWindow * w, effects->stackingOrder()) @@ -1522,7 +1531,7 @@ void PresentWindowsEffect::setActive(bool active, bool closingTab) while (i != m_windowData.end()) { delete i.value().textFrame; delete i.value().iconFrame; - i++; + ++i; } m_windowData.clear(); @@ -1536,7 +1545,7 @@ void PresentWindowsEffect::setActive(bool active, bool closingTab) effects->setActiveFullScreenEffect(this); m_gridSizes.clear(); - for (int i = 0; i < effects->numScreens(); i++) + for (int i = 0; i < effects->numScreens(); ++i) m_gridSizes.append(GridSize()); rearrangeWindows(); @@ -1559,9 +1568,10 @@ void PresentWindowsEffect::setActive(bool active, bool closingTab) if (activeWindow && !activeWindow->isOnAllDesktops()) desktop = activeWindow->desktop(); foreach (EffectWindow * w, effects->stackingOrder()) { - assert(m_windowData.contains(w)); - m_windowData[w].visible = (w->isOnDesktop(desktop) || w->isOnAllDesktops()) && - !w->isMinimized() && (w->visibleInClientGroup() || m_windowData[w].visible); + DataHash::iterator winData = m_windowData.find(w); + if (winData != m_windowData.end()) + winData->visible = (w->isOnDesktop(desktop) || w->isOnAllDesktops()) && + !w->isMinimized() && (w->visibleInClientGroup() || winData->visible); } delete m_closeView; m_closeView = 0; @@ -1701,7 +1711,8 @@ EffectWindow* PresentWindowsEffect::relativeWindow(EffectWindow *w, int xdiff, i detectRect = QRect(0, wArea.y(), area.width(), wArea.height()); next = NULL; foreach (EffectWindow * e, m_motionManager.managedWindows()) { - if (!m_windowData[e].visible) + DataHash::const_iterator winData = m_windowData.find(e); + if (winData == m_windowData.end() || !winData->visible) continue; QRectF eArea = m_motionManager.transformedGeometry(e); if (eArea.intersects(detectRect) && @@ -1730,7 +1741,8 @@ EffectWindow* PresentWindowsEffect::relativeWindow(EffectWindow *w, int xdiff, i detectRect = QRect(0, wArea.y(), area.width(), wArea.height()); next = NULL; foreach (EffectWindow * e, m_motionManager.managedWindows()) { - if (!m_windowData[e].visible) + DataHash::const_iterator winData = m_windowData.find(e); + if (winData == m_windowData.end() || !winData->visible) continue; QRectF eArea = m_motionManager.transformedGeometry(e); if (eArea.intersects(detectRect) && @@ -1764,7 +1776,8 @@ EffectWindow* PresentWindowsEffect::relativeWindow(EffectWindow *w, int xdiff, i detectRect = QRect(wArea.x(), 0, wArea.width(), area.height()); next = NULL; foreach (EffectWindow * e, m_motionManager.managedWindows()) { - if (!m_windowData[e].visible) + DataHash::const_iterator winData = m_windowData.find(e); + if (winData == m_windowData.end() || !winData->visible) continue; QRectF eArea = m_motionManager.transformedGeometry(e); if (eArea.intersects(detectRect) && @@ -1793,7 +1806,8 @@ EffectWindow* PresentWindowsEffect::relativeWindow(EffectWindow *w, int xdiff, i detectRect = QRect(wArea.x(), 0, wArea.width(), area.height()); next = NULL; foreach (EffectWindow * e, m_motionManager.managedWindows()) { - if (!m_windowData[e].visible) + DataHash::const_iterator winData = m_windowData.find(e); + if (winData == m_windowData.end() || !winData->visible) continue; QRectF eArea = m_motionManager.transformedGeometry(e); if (eArea.intersects(detectRect) && @@ -1826,10 +1840,13 @@ EffectWindow* PresentWindowsEffect::findFirstWindow() const EffectWindow *topLeft = NULL; QRectF topLeftGeometry; foreach (EffectWindow * w, m_motionManager.managedWindows()) { + DataHash::const_iterator winData = m_windowData.find(w); + if (winData == m_windowData.end()) + continue; QRectF geometry = m_motionManager.transformedGeometry(w); - if (m_windowData[w].visible == false) + if (winData->visible == false) continue; // Not visible - if (m_windowData[w].deleted) + if (winData->deleted) continue; // Window has been closed if (topLeft == NULL) { topLeft = w; diff --git a/effects/presentwindows/presentwindows.desktop b/effects/presentwindows/presentwindows.desktop index ac43b14ef1..972cec9019 100644 --- a/effects/presentwindows/presentwindows.desktop +++ b/effects/presentwindows/presentwindows.desktop @@ -30,7 +30,7 @@ Name[hi]=मौजूद विंडो Name[hne]=मौजूद विंडो Name[hr]=Prikaz prozora Name[hu]=Ablakáttekintő -Name[ia]=Fenestras Actual +Name[ia]=Fenestras actual Name[id]=Jendela Yang Hadir Name[is]=Núverandi gluggar Name[it]=Presenta le finestre diff --git a/effects/presentwindows/presentwindows.h b/effects/presentwindows/presentwindows.h index 0edc683a60..deb69a9eb5 100644 --- a/effects/presentwindows/presentwindows.h +++ b/effects/presentwindows/presentwindows.h @@ -74,8 +74,6 @@ private: bool referenced; double opacity; double highlight; - int slot; - int slot_distance; EffectFrame* textFrame; EffectFrame* iconFrame; }; @@ -185,8 +183,6 @@ protected: inline int heightForWidth(EffectWindow *w, int width) { return int((width / double(w->width())) * w->height()); } - void assignSlots(EffectWindowList windowlist, const QRect &area, int columns, int rows); - void getBestAssignments(EffectWindowList windowlist); bool isOverlappingAny(EffectWindow *w, const QHash &targets, const QRegion &border); // Filter box diff --git a/effects/presentwindows/presentwindows_config.desktop b/effects/presentwindows/presentwindows_config.desktop index d55fcfff42..5f079475a9 100644 --- a/effects/presentwindows/presentwindows_config.desktop +++ b/effects/presentwindows/presentwindows_config.desktop @@ -37,7 +37,7 @@ Name[hi]=मौजूद विंडो Name[hne]=मौजूद विंडो Name[hr]=Prikaz prozora Name[hu]=Ablakáttekintő -Name[ia]=Fenestras Actual +Name[ia]=Fenestras actual Name[id]=Jendela Yang Hadir Name[is]=Núverandi gluggar Name[it]=Presenta le finestre diff --git a/effects/resize/resize.desktop b/effects/resize/resize.desktop index bb253f813a..edcd3a5031 100644 --- a/effects/resize/resize.desktop +++ b/effects/resize/resize.desktop @@ -25,7 +25,7 @@ Name[he]=שינוי גודל חלון Name[hi]=विंडो आकार बदलें Name[hr]=Promjena veličine prozora Name[hu]=Ablak átméretezése -Name[ia]=Redimensiona Fenestra +Name[ia]=Redimensiona fenestra Name[id]=Ubah Ukuran Jendela Name[is]=Breyta stærð glugga Name[it]=Ridimensiona la finestra @@ -70,6 +70,7 @@ Comment[ca]=Redimensiona les finestres amb un escalat de textura ràpid enlloc d Comment[ca@valencia]=Redimensiona les finestres amb un escalat de textura ràpid enlloc d'actualitzar els continguts Comment[cs]=Změní velikost okna s využitím rychlého škálování textury místo aktualizace obsahu Comment[da]=Ændrer størrelse på vinduer med en hurtig teksturskalering i stedet for at opdatere indholdet +Comment[de]=Schnelles Skalieren der Fenster-Texturen ohne Aktualisierung des Fensterinhalts Comment[el]=Αλλάζει το μέγεθος του παραθύρου χρησιμοποιώντας ταχείες υφές αντί να ανανεώνει τα περιεχόμενα Comment[en_GB]=Resizes windows with a fast texture scale instead of updating contents Comment[es]=Redimensiona las ventanas con un escalado rápido de texturas en lugar de actualizando los contenidos @@ -97,6 +98,7 @@ Comment[sr@ijekavianlatin]=Promena veličine prozora brzim teksturnim skaliranje Comment[sr@latin]=Promena veličine prozora brzim teksturnim skaliranjem umesto ažuriranjem sadržaja Comment[sv]=Ändrar storlek på fönster med en snabb strukturskalning istället för att uppdatera innehållet. Comment[th]=ปรับขนาดหน้าต่างด้วยการปรับพื้นผิวอย่างรวดเร็ว แทนการปรับปรุงเนื้อหาภายในหน้าต่าง +Comment[tr]=İçeriklerini güncellemek yerine pencereleri hızlı bir doku ölçeğiyle yeniden boyutlandırır. Comment[uk]=Зміна розмірів вікон швидким масштабуванням текстур замість оновлення вмісту вікон Comment[x-test]=xxResizes windows with a fast texture scale instead of updating contentsxx Comment[zh_TW]=用快速調整縮放而不是更新內容的方式重新調整視窗大小 diff --git a/effects/resize/resize_config.desktop b/effects/resize/resize_config.desktop index cf54bb65ab..b729646c0b 100644 --- a/effects/resize/resize_config.desktop +++ b/effects/resize/resize_config.desktop @@ -32,7 +32,7 @@ Name[he]=שינוי גודל חלון Name[hi]=विंडो आकार बदलें Name[hr]=Promjena veličine prozora Name[hu]=Ablak átméretezése -Name[ia]=Redimensiona Fenestra +Name[ia]=Redimensiona fenestra Name[id]=Ubah Ukuran Jendela Name[is]=Breyta stærð glugga Name[it]=Ridimensiona la finestra diff --git a/effects/screenshot/screenshot.desktop b/effects/screenshot/screenshot.desktop index 45440c8528..4b40bd961e 100644 --- a/effects/screenshot/screenshot.desktop +++ b/effects/screenshot/screenshot.desktop @@ -91,6 +91,7 @@ Comment[sr@ijekavianlatin]=Upisuje snimak aktivnog prozora u domaću fasciklu Comment[sr@latin]=Upisuje snimak aktivnog prozora u domaću fasciklu Comment[sv]=Sparar en skärmbild av det aktiva fönstret i hemkatalogen Comment[th]=บันทึกการจับภาพหน้าจอของหน้าต่างที่ทำงานอยู่ไปเก็บไว้ในไดเรกทอรีพื้นที่ส่วนตัว +Comment[tr]=Etkin pencerenin ekran görüntüsünü ev dizinine kaydeder Comment[uk]=Зберігає знімок активного вікна до домашнього каталогу Comment[x-test]=xxSaves screenshot of active window into the home directoryxx Comment[zh_TW]=將目前作用中視窗的快照儲存到家目錄中 diff --git a/effects/showpaint/showpaint.desktop b/effects/showpaint/showpaint.desktop index b5fdb2b16c..77bea8556c 100644 --- a/effects/showpaint/showpaint.desktop +++ b/effects/showpaint/showpaint.desktop @@ -28,7 +28,7 @@ Name[hi]=पेंट दिखाएं Name[hne]=पेंट देखाव Name[hr]=Prikaz nedavnih promjena Name[hu]=Megmutatja a kirajzolt területeket -Name[ia]=Monstra Pictura +Name[ia]=Monstra pictura Name[id]=Tampilkan Lukisan Name[is]=Sýna teikningu Name[it]=Mostra il ridisegno diff --git a/effects/slidingpopups/slidingpopups.desktop b/effects/slidingpopups/slidingpopups.desktop index 0ff5e49cea..35b9f63acf 100644 --- a/effects/slidingpopups/slidingpopups.desktop +++ b/effects/slidingpopups/slidingpopups.desktop @@ -77,7 +77,7 @@ Comment[ga]=Beochan sleamhnaithe le haghaidh preabfhuinneog Plasma Comment[gl]=Animación deslizantes para os widgets de Plasma emerxentes Comment[he]=הנפשת החלקה עבור חלוניות קופצות של Plasma Comment[hr]=Animacija pomicanja za Plasma iskočnike -Comment[ia]=Animation glissante pro popups de plasma +Comment[ia]=Animation glissante pro popups de Plasma Comment[id]=Animasi menggeser untuk popup Plasma Comment[is]=Rennslishreyfing fyrir Plasma sprettglugga Comment[it]=Animazione in scivolata per le finestre a comparsa di Plasma diff --git a/effects/startupfeedback/startupfeedback.desktop b/effects/startupfeedback/startupfeedback.desktop index 6af66c0278..9052046e08 100644 --- a/effects/startupfeedback/startupfeedback.desktop +++ b/effects/startupfeedback/startupfeedback.desktop @@ -16,7 +16,7 @@ Name[he]=משוב להפעלה Name[hi]=शुरुआती फ़ीडबैक Name[hr]=Povratna informacija pri pokretanju Name[hu]=Alkalmazásindítási effektus -Name[ia]=Retorno de Lanceamento +Name[ia]=Retorno ab lanceamento Name[it]=Segnale di avvio Name[ja]=起動フィードバック Name[kk]=Жегу барысы @@ -39,6 +39,7 @@ Name[sr@ijekavianlatin]=Odziv pri pokretanju Name[sr@latin]=Odziv pri pokretanju Name[sv]=Gensvar vid programstart Name[th]=ตอบสนองการเริ่มโปรแกรม +Name[tr]=Açılış Geribildirimi Name[uk]=Повідомлення під час запуску Name[x-test]=xxStartup Feedbackxx Name[zh_CN]=启动反馈 @@ -58,7 +59,7 @@ Comment[fi]=Avustajatehoste käynnistyksen ilmaisemiseen Comment[fr]=Effet de l'assistant pour les commentaires de démarrage Comment[he]=אפקט המשמש כמשוב להפעלה Comment[hr]=Pomoćni efekt za povratnu informaciju pri pokretanju -Comment[ia]=Effecto de adjutante pro retorno de lanceamento +Comment[ia]=Effecto de adjutante pro retorno ab lanceamento Comment[it]=Effetto di assistenza per il segnale di avvio Comment[kk]=Жегу барысын көрсететін эффекті Comment[km]=កម្មវិធី​ជំនួយ​មាន​ប្រសិទ្ធភាព​នៅពេល​លចាប់ផ្ដើម​មតិត្រឡប់ @@ -79,6 +80,7 @@ Comment[sr@ijekavianlatin]=Pomoćni efekat za odziv pri pokretanju Comment[sr@latin]=Pomoćni efekat za odziv pri pokretanju Comment[sv]=Hjälpeffekt för gensvar vid programstart Comment[th]=ลูกเล่นที่จะแสดงเพื่อรอการเริ่มการทำงานของโปรแกรม +Comment[tr]=Açılış geribildirimi için yardımcı etkisi Comment[uk]=Допоміжний ефект перегляду повідомлень, що надсилаються програмою під час запуску Comment[wa]=Efet aidant pol ritoû d' enondaedje Comment[x-test]=xxHelper effect for startup feedbackxx diff --git a/effects/taskbarthumbnail/taskbarthumbnail.desktop b/effects/taskbarthumbnail/taskbarthumbnail.desktop index 02c16af57b..92b3c95ec4 100644 --- a/effects/taskbarthumbnail/taskbarthumbnail.desktop +++ b/effects/taskbarthumbnail/taskbarthumbnail.desktop @@ -29,7 +29,7 @@ Name[hi]=कार्यपट्टी लघु छवि Name[hne]=कामपट्टी चिनहा Name[hr]=Sličice programske trake Name[hu]=Gyorsnézetek a feladatsávon -Name[ia]=Notas de barra de carga (taskbar) +Name[ia]=Miniaturas de barra de cargas Name[id]=Miniatur Batang Alat Name[is]=Smámyndir á verkefnaslá Name[it]=Miniature sulla barra delle applicazioni @@ -99,7 +99,7 @@ Comment[he]=הצגת תמונות ממוזערות של חלונות בעת מע Comment[hne]=टास्कबार प्रविस्टि मं जब मुसुवा होवर होही त विंडो चिनहा देखाव Comment[hr]=Prikazuje sličice prozora pri prelasku mišem preko stavaka programske trake Comment[hu]=Megmutatja a feladatsáv gombjai fölött az ablakok kicsinyített képét -Comment[ia]=Monstra notas de fenestra quando il es suspendite super entratas de la barra de carga +Comment[ia]=Monstra miniaturas de fenestra quando il es suspendite super entratas de la barra de carga Comment[id]=Tampilkan miniatur jendela ketika melayang di atas lema batang tugas Comment[is]=Sýnir smámyndir glugga þegar bendill er á færslu verkefnaslárinnar Comment[it]=Mostra delle miniature delle finestre al passaggio sulle voci della barra delle applicazioni diff --git a/effects/trackmouse/trackmouse.desktop b/effects/trackmouse/trackmouse.desktop index 026760b3c2..343251fc1c 100644 --- a/effects/trackmouse/trackmouse.desktop +++ b/effects/trackmouse/trackmouse.desktop @@ -31,7 +31,7 @@ Name[hi]=माउस ट्रैक करें Name[hne]=मुसुवा ट्रैक करव Name[hr]=Praćenje miša Name[hu]=Egérkövetés -Name[ia]=Tracia Mus +Name[ia]=Tracia mus Name[id]=Lacak Tetikus Name[is]=Elta mús Name[it]=Trova il mouse diff --git a/effects/trackmouse/trackmouse_config.desktop b/effects/trackmouse/trackmouse_config.desktop index 4376b60391..f782675f2c 100644 --- a/effects/trackmouse/trackmouse_config.desktop +++ b/effects/trackmouse/trackmouse_config.desktop @@ -38,7 +38,7 @@ Name[hi]=माउस ट्रैक करें Name[hne]=मुसुवा ट्रैक करव Name[hr]=Praćenje miša Name[hu]=Egérkövetés -Name[ia]=Tracia Mus +Name[ia]=Tracia mus Name[id]=Lacak Tetikus Name[is]=Elta mús Name[it]=Trova il mouse diff --git a/effects/windowgeometry/windowgeometry.desktop b/effects/windowgeometry/windowgeometry.desktop index 8441e0dc7b..002a627599 100644 --- a/effects/windowgeometry/windowgeometry.desktop +++ b/effects/windowgeometry/windowgeometry.desktop @@ -37,6 +37,7 @@ Name[sr@ijekavianlatin]=Geometrija prozora Name[sr@latin]=Geometrija prozora Name[sv]=Fönstergeometri Name[th]=มิติขนาดของหน้าต่าง +Name[tr]=PencereGeometrisi Name[uk]=Розміри вікна Name[x-test]=xxWindowGeometryxx Name[zh_TW]=視窗位置 @@ -75,6 +76,7 @@ Comment[sr@ijekavianlatin]=Prikaz geometrije prozora pri premeštanju i preuveli Comment[sr@latin]=Prikaz geometrije prozora pri premeštanju i preuveličavanju Comment[sv]=Visa fönstergeometri vid förflyttning och storleksändring Comment[th]=แสดงมิติขนาดของหน้าต่างเมื่อมีการย้ายหรือปรับขนาดหน้าต่าง +Comment[tr]=Taşıma/yeniden boyutlandırmada pencere şekilllerini görüntüle Comment[uk]=Показ розмірів вікон при пересуванні або зміні розмірів Comment[x-test]=xxDisplay window geometries on move/resizexx Comment[zh_TW]=移動/調整大小時顯示視窗位置 diff --git a/effects/windowgeometry/windowgeometry_config.desktop b/effects/windowgeometry/windowgeometry_config.desktop index adb2a22d49..b5a1073765 100644 --- a/effects/windowgeometry/windowgeometry_config.desktop +++ b/effects/windowgeometry/windowgeometry_config.desktop @@ -43,6 +43,7 @@ Name[sr@ijekavianlatin]=Geometrija prozora Name[sr@latin]=Geometrija prozora Name[sv]=Fönstergeometri Name[th]=มิติขนาดของหน้าต่าง +Name[tr]=PencereGeometrisi Name[uk]=Розміри вікна Name[x-test]=xxWindowGeometryxx Name[zh_TW]=視窗位置 diff --git a/events.cpp b/events.cpp index f28e1bc02e..7ce6dad10a 100644 --- a/events.cpp +++ b/events.cpp @@ -870,6 +870,8 @@ void Client::propertyNotifyEvent(XPropertyEvent* e) getSyncCounter(); else if (e->atom == atoms->activities) checkActivities(); + else if (e->atom == atoms->kde_net_wm_block_compositing) + updateCompositeBlocking(true); break; } } diff --git a/kcmkwin/kwindesktop/desktop.desktop b/kcmkwin/kwindesktop/desktop.desktop index 7e89fd6934..05ef16cee0 100644 --- a/kcmkwin/kwindesktop/desktop.desktop +++ b/kcmkwin/kwindesktop/desktop.desktop @@ -33,7 +33,7 @@ Name[he]=שולחנות עבודה וירטואליים Name[hi]=आभासी डेस्कटॉप Name[hr]=Virtualne radne površine Name[hu]=Virtuális asztalok -Name[ia]=Scriptorios Virtual +Name[ia]=Scriptorios virtual Name[id]=Desktop Virtual Name[is]=Sýndarskjáborð Name[it]=Desktop virtuali @@ -105,7 +105,7 @@ Comment[hi]=आप कॉन्फ़िगर कर सकते हैं क Comment[hne]=आप मन कान्फिगर कर सकथो कि उहां कतका ठन आभासी डेस्कटाप होही. Comment[hr]=Konfiguriranje broja virtualnih radnih površina Comment[hu]=A virtuális munkaasztalok számának beállítása -Comment[ia]=Tu pote configurar quante es le scriptorios virtual. +Comment[ia]=Tu pote configurar le quantitate del scriptorios virtual. Comment[id]=Anda dapat mengatur berapa banyak desktop virtual yang ada. Comment[is]=Hér getur þú stillt hversu mörg sýndaskjáborðin eru. Comment[it]=Configura quanti desktop virtuali vuoi. diff --git a/kcmkwin/kwinoptions/kwinactions.desktop b/kcmkwin/kwinoptions/kwinactions.desktop index bec66334ec..f4168ac4b1 100644 --- a/kcmkwin/kwinoptions/kwinactions.desktop +++ b/kcmkwin/kwinoptions/kwinactions.desktop @@ -133,7 +133,7 @@ Comment[hi]=कुंजीपट तथा माउस विन्यास Comment[hne]=कुंजीपट अउ मुसुवा सेटिंग कान्फिगर करव Comment[hr]=Konfiguriranje postavki tipkovnice i miša Comment[hu]=A billentyűzet- és egérkezelés beállításai -Comment[ia]=Configurar preferentias de claviero e mus +Comment[ia]=Configura preferentias de claviero e mus Comment[id]=Atur pengaturan papan ketik dan tetikus Comment[is]=Stilla lyklaborð og mús Comment[it]=Configura le impostazioni della tastiera e del mouse diff --git a/kcmkwin/kwinoptions/kwinmoving.desktop b/kcmkwin/kwinoptions/kwinmoving.desktop index ff8c02a19f..0e57538411 100644 --- a/kcmkwin/kwinoptions/kwinmoving.desktop +++ b/kcmkwin/kwinoptions/kwinmoving.desktop @@ -43,7 +43,7 @@ Name[hi]=खिसकाते हुए Name[hne]=खिसकावत हे Name[hr]=Pomicanje Name[hu]=Mozgatás -Name[ia]=Mover +Name[ia]=Movente Name[id]=Memindahkan Name[is]=Færa Name[it]=Spostamento @@ -130,7 +130,7 @@ Comment[hi]=कॉन्फ़िगर करें कि विंडो क Comment[hne]=कान्फिगर करव कि विंडो कइसन खिसके Comment[hr]=Konfiguriranje načina pomicanja prozora Comment[hu]=Az ablakmozgatás beállításai -Comment[ia]=Configura le modo que fenestrar es movite +Comment[ia]=Configura le modo que fenestras es movite Comment[id]=Atur bagaimana cara jendela dipindahkan Comment[is]=Stilla hvernig gluggar eru hreyfðir Comment[it]=Configura come le finestre vengono spostate diff --git a/kcmkwin/kwinoptions/kwinoptions.desktop b/kcmkwin/kwinoptions/kwinoptions.desktop index 4f5b4f9f01..a584ee446e 100644 --- a/kcmkwin/kwinoptions/kwinoptions.desktop +++ b/kcmkwin/kwinoptions/kwinoptions.desktop @@ -134,7 +134,7 @@ Comment[hi]=विंडो व्यवहार कॉन्फ़िगर Comment[hne]=विंडो व्यवहार कान्फिगर करव Comment[hr]=Konfiguriranje ponašanja preglednika Comment[hu]=Az ablakok működési jellemzőinek beállítása -Comment[ia]=Configurar le comportamento de fenestra +Comment[ia]=Configura le comportamento de fenestra Comment[id]=Atur perilaku jendela Comment[is]=Stilla hegðan glugga Comment[it]=Configura il comportamento delle finestre diff --git a/kcmkwin/kwinrules/kwinrules.desktop b/kcmkwin/kwinrules/kwinrules.desktop index 486e513e97..a543e88acb 100644 --- a/kcmkwin/kwinrules/kwinrules.desktop +++ b/kcmkwin/kwinrules/kwinrules.desktop @@ -31,7 +31,7 @@ Name[he]=כללי חלון Name[hi]=विंडो निय Name[hr]=Pravila prozora Name[hu]=Ablakszabályok -Name[ia]=Regulas de Window +Name[ia]=Regulas de fenestra Name[id]=Aturan Jendela Name[is]=Gluggahegðunarreglur Name[it]=Regole delle finestre @@ -102,7 +102,7 @@ Comment[hi]=किसी खास विंडो के लिए विन् Comment[hne]=कोई खास विंडो बर सेटिंग कान्फिगर करव Comment[hr]=Konfiguriranje određenih postavki za prozor Comment[hu]=Egy adott ablak beállításai -Comment[ia]=Configurar preferentias specificamente pro un fenestra +Comment[ia]=Configura preferentias specificamente pro un fenestra Comment[id]=Atur pengaturan terutama untuk jendela Comment[is]=Stillingar sem varða tiltekinn glugga Comment[it]=Configura le impostazioni specifiche di una finestra diff --git a/kcmkwin/kwinrules/ruleswidget.cpp b/kcmkwin/kwinrules/ruleswidget.cpp index f9fc4076e8..b9fe8497e5 100644 --- a/kcmkwin/kwinrules/ruleswidget.cpp +++ b/kcmkwin/kwinrules/ruleswidget.cpp @@ -115,6 +115,7 @@ RulesWidget::RulesWidget(QWidget* parent) SETUP(maxsize, force); SETUP(strictgeometry, force); SETUP(disableglobalshortcuts, force); + SETUP(blockcompositing, force); int i; for (i = 1; i <= KWindowSystem::numberOfDesktops(); @@ -171,6 +172,7 @@ UPDATE_ENABLE_SLOT(minsize) UPDATE_ENABLE_SLOT(maxsize) UPDATE_ENABLE_SLOT(strictgeometry) UPDATE_ENABLE_SLOT(disableglobalshortcuts) +UPDATE_ENABLE_SLOT(blockcompositing) #undef UPDATE_ENABLE_SLOT @@ -450,6 +452,7 @@ void RulesWidget::setRules(Rules* rules) LINEEDIT_FORCE_RULE(maxsize, sizeToStr); CHECKBOX_FORCE_RULE(strictgeometry,); CHECKBOX_FORCE_RULE(disableglobalshortcuts,); + CHECKBOX_FORCE_RULE(blockcompositing,); } #undef GENERIC_RULE @@ -544,6 +547,7 @@ Rules* RulesWidget::rules() const LINEEDIT_FORCE_RULE(maxsize, strToSize); CHECKBOX_FORCE_RULE(strictgeometry,); CHECKBOX_FORCE_RULE(disableglobalshortcuts,); + CHECKBOX_FORCE_RULE(blockcompositing,); return rules; } @@ -662,6 +666,7 @@ void RulesWidget::prefillUnusedValues(const KWindowInfo& info) LINEEDIT_PREFILL(maxsize, sizeToStr, info.frameGeometry().size()); //CHECKBOX_PREFILL( strictgeometry, ); //CHECKBOX_PREFILL( disableglobalshortcuts, ); + //CHECKBOX_PREFILL( blockcompositing, ); } #undef GENERIC_PREFILL diff --git a/kcmkwin/kwinrules/ruleswidget.h b/kcmkwin/kwinrules/ruleswidget.h index ca44bf2c7b..6972e523d6 100644 --- a/kcmkwin/kwinrules/ruleswidget.h +++ b/kcmkwin/kwinrules/ruleswidget.h @@ -89,6 +89,7 @@ private slots: void updateEnablestrictgeometry(); void updateEnableshortcut(); void updateEnabledisableglobalshortcuts(); + void updateEnableblockcompositing(); // internal void detected(bool); private: diff --git a/kcmkwin/kwinrules/ruleswidgetbase.ui b/kcmkwin/kwinrules/ruleswidgetbase.ui index 74ac56b6f2..84e05c08dc 100644 --- a/kcmkwin/kwinrules/ruleswidgetbase.ui +++ b/kcmkwin/kwinrules/ruleswidgetbase.ui @@ -1792,7 +1792,7 @@ W&orkarounds - + @@ -1800,6 +1800,113 @@ + + + + false + + + + Do Not Affect + + + + + Force + + + + + Force Temporarily + + + + + + + + false + + + + None + + + + + Low + + + + + Normal + + + + + High + + + + + Extreme + + + + + + + + &Moving/resizing + + + + + + + false + + + + Do Not Affect + + + + + Force + + + + + Force Temporarily + + + + + + + + false + + + + Opaque + + + + + Transparent + + + + + + + + Window &type + + + @@ -1879,191 +1986,6 @@ - - - - false - - - - Opaque - - - - - Transparent - - - - - - - - Window &type - - - - - - - &Moving/resizing - - - - - - - false - - - - Do Not Affect - - - - - Force - - - - - Force Temporarily - - - - - - - - false - - - - Do Not Affect - - - - - Force - - - - - Force Temporarily - - - - - - - - false - - - - None - - - - - Low - - - - - Normal - - - - - High - - - - - Extreme - - - - - - - - false - - - 0123456789-+,xX: - - - - - - - M&inimum size - - - - - - - false - - - - Do Not Affect - - - - - Force - - - - - Force Temporarily - - - - - - - - M&aximum size - - - - - - - false - - - 0123456789-+,xX: - - - - - - - false - - - - Do Not Affect - - - - - Force - - - - - Force Temporarily - - - - @@ -2103,21 +2025,83 @@ - - - - Qt::Vertical + + + + M&inimum size - - QSizePolicy::Expanding + + + + + + false - - - 20 - 160 - + + + Do Not Affect + + + + + Force + + + + + Force Temporarily + + + + + + + + false - + + 0123456789-+,xX: + + + + + + + M&aximum size + + + + + + + false + + + + Do Not Affect + + + + + Force + + + + + Force Temporarily + + + + + + + + false + + + 0123456789-+,xX: + + @@ -2161,16 +2145,6 @@ - - - - false - - - - - - @@ -2203,6 +2177,68 @@ + + + + false + + + + + + + + + + Block compositing + + + + + + + false + + + + Do Not Affect + + + + + Force + + + + + Force Temporarily + + + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 160 + + + + diff --git a/kcmkwin/kwinscreenedges/kwinscreenedges.desktop b/kcmkwin/kwinscreenedges/kwinscreenedges.desktop index f7ad0e1108..1df3708c51 100644 --- a/kcmkwin/kwinscreenedges/kwinscreenedges.desktop +++ b/kcmkwin/kwinscreenedges/kwinscreenedges.desktop @@ -37,7 +37,7 @@ Name[he]=קצוות מסך Name[hi]=स्क्रीन सीमाएँ Name[hr]=Rubovi ekrana Name[hu]=Képernyőszélek -Name[ia]=margines de schermo +Name[ia]=Margines de schermo Name[id]=Tepi Layar Name[is]=Skjájaðrar Name[it]=Lati dello schermo @@ -102,7 +102,7 @@ Comment[gu]=સક્રિય સ્ક્રિન ધારો રૂપર Comment[he]=הגדרת קצוות מסך פעילים Comment[hr]=Konfiguracija aktivnih rubova ekrana Comment[hu]=Aktív képernyőszegélyeket kapcsol be -Comment[ia]=Configurar margines de schermo active +Comment[ia]=Configura margines de schermo active Comment[id]=Atur tepi layar aktif Comment[is]=Stilla virka skjájaðra Comment[it]=Configura i lati dello schermo attivi diff --git a/kcmkwin/kwintabbox/kwintabbox.desktop b/kcmkwin/kwintabbox/kwintabbox.desktop index adac4cc507..4b2164f67f 100644 --- a/kcmkwin/kwintabbox/kwintabbox.desktop +++ b/kcmkwin/kwintabbox/kwintabbox.desktop @@ -29,7 +29,7 @@ Name[he]=מחליף משימות Name[hi]=कार्य बदल Name[hr]=Prebacivač zadataka Name[hu]=Feladatváltó -Name[ia]=Commutator de Carga +Name[ia]=Commutator de carga Name[id]=Pengganti Tugas Name[is]=Verkefnaskiptir Name[it]=Scambiafinestre @@ -79,7 +79,7 @@ Comment[fi]=Muokkaa ikkunoiden selauksen toimintatapaa Comment[fr]=Configuration du comportement pour la navigation à travers les fenêtres Comment[he]=הגדרת ההתנהגות בניווט בין חלונות Comment[hr]=Podesi ponašanje listanja prozora -Comment[ia]=Configurar le comportamento pro navigar intra fenestras +Comment[ia]=Configura le comportamento pro navigar intra fenestras Comment[it]=Configura come si naviga tra le finestre Comment[ja]=ウィンドウ間を移動する際の挙動を設定 Comment[kk]=Терезелер арасында ауысу тәртібін орнату. @@ -102,6 +102,7 @@ Comment[sr@ijekavianlatin]=Podešavanje ponašanja pri kretanju kroz prozore Comment[sr@latin]=Podešavanje ponašanja pri kretanju kroz prozore Comment[sv]=Anpassa beteendet för att navigera i fönster Comment[th]=ปรับแต่งพฤติกรรมของการนำร่องไปยังหน้าต่างต่าง ๆ +Comment[tr]=Pencereler arasında gezinme davranışını yapılandır Comment[uk]=Налаштування поведінки системи під час навігації вікнами Comment[x-test]=xxConfigure the behavior for navigating through windowsxx Comment[zh_TW]=設定透過視窗導覽的行為。 diff --git a/kwin.notifyrc b/kwin.notifyrc index 1088d8c20d..22c9e3d7fe 100644 --- a/kwin.notifyrc +++ b/kwin.notifyrc @@ -20,7 +20,7 @@ Comment[he]=מנהל החלונות KWin Comment[hi]=केविन विंडो प्रबंधक Comment[hr]=Upravitelj prozora KWin Comment[hu]=KWin ablakkezelő -Comment[ia]=Gerente de Fenestra KWin +Comment[ia]=Gerente de fenestra KWin Comment[id]=Manajer Jendela KWin Comment[is]=KWin gluggastjóri Comment[it]=Gestore delle finestre KWin @@ -93,7 +93,7 @@ Name[hi]=डेस्कटॉप 1 पर जाएँ Name[hne]=डेस्कटाप १ मं जाव Name[hr]=Prebaci se na radnu površinu 1 Name[hu]=Váltás az 1. asztalra -Name[ia]=Cambiar a Scriptorio 1 +Name[ia]=Cambia a Scriptorio 1 Name[id]=Ubah ke Desktop 1 Name[is]=Birta skjáborð 1 Name[it]=Passa al desktop 1 @@ -264,7 +264,7 @@ Name[hi]=डेस्कटॉप 2 पर जाएँ Name[hne]=डेस्कटाप २ मं जाव Name[hr]=Prebaci se na radnu površinu 2 Name[hu]=Váltás a 2. asztalra -Name[ia]=Cambiar a Scriptorio 2 +Name[ia]=Cambia a Scriptorio 2 Name[id]=Ubah ke Desktop 2 Name[is]=Birta skjáborð 2 Name[it]=Vai al desktop 2 @@ -436,7 +436,7 @@ Name[hi]=डेस्कटॉप 3 पर जाएँ Name[hne]=डेस्कटाप २ मं जाव Name[hr]=Prebaci se na radnu površinu 3 Name[hu]=Váltás a 3. asztalra -Name[ia]=Cambiar a Scriptorio 3 +Name[ia]=Cambia a Scriptorio 3 Name[id]=Ubah ke Desktop 3 Name[is]=Birta skjáborð 3 Name[it]=Vai al desktop 3 @@ -608,7 +608,7 @@ Name[hi]=डेस्कटॉप 4 पर जाएँ Name[hne]=डेस्कटाप ४ मं जाव Name[hr]=Prebaci se na radnu površinu 4 Name[hu]=Váltás a 4. asztalra -Name[ia]=Cambiar a Scriptorio 4 +Name[ia]=Cambia a Scriptorio 4 Name[id]=Ubah ke Desktop 4 Name[is]=Birta skjáborð 4 Name[it]=Vai al desktop 4 @@ -779,7 +779,7 @@ Name[hi]=डेस्कटॉप 5 पर जाएँ Name[hne]=डेस्कटाप ५ मं जाव Name[hr]=Prebaci se na radnu površinu 5 Name[hu]=Váltás az 5. asztalra -Name[ia]=Cambiar a Scriptorio 5 +Name[ia]=Cambia a Scriptorio 5 Name[id]=Ubah ke Desktop 5 Name[is]=Birta skjáborð 5 Name[it]=Vai al desktop 5 @@ -951,7 +951,7 @@ Name[hi]=डेस्कटॉप 6 पर जाएँ Name[hne]=डेस्कटाप ६ मं जाव Name[hr]=Prebaci se na radnu površinu 6 Name[hu]=Váltás a 6. asztalra -Name[ia]=Cambiar a Scriptorio 6 +Name[ia]=Cambia a Scriptorio 6 Name[id]=Ubah ke Desktop 6 Name[is]=Birta skjáborð 6 Name[it]=Vai al desktop 6 @@ -1121,7 +1121,7 @@ Name[hi]=डेस्कटॉप 7 पर जाएँ Name[hne]=डेस्कटाप ७ मं जाव Name[hr]=Prebaci se na radnu površinu 7 Name[hu]=Váltás: 7. asztalra -Name[ia]=Cambiar a Scriptorio 7 +Name[ia]=Cambia a Scriptorio 7 Name[id]=Ubah ke Desktop 7 Name[is]=Birta skjáborð 7 Name[it]=Vai al desktop 7 @@ -1293,7 +1293,7 @@ Name[hi]=डेस्कटॉप 8 पर जाएँ Name[hne]=डेस्कटाप ८ मं जाव Name[hr]=Prebaci se na radnu površinu 8 Name[hu]=Váltás: 8. asztalra -Name[ia]=Cambiar a Scriptorio 8 +Name[ia]=Cambia a Scriptorio 8 Name[id]=Ubah ke Desktop 8 Name[is]=Birta skjáborð 8 Name[it]=Vai al desktop 8 @@ -1464,7 +1464,7 @@ Name[hi]=डेस्कटॉप 9 पर जाएँ Name[hne]=डेस्कटाप ९ मं जाव Name[hr]=Prebaci se na radnu površinu 9 Name[hu]=Váltás: 9. asztalra -Name[ia]=Cambiar a Scriptorio 9 +Name[ia]=Cambia a Scriptorio 9 Name[id]=Ubah ke Desktop 9 Name[is]=Birta skjáborð 9 Name[it]=Vai al desktop 9 @@ -1632,7 +1632,7 @@ Name[hi]=डेस्कटॉप 10 पर जाएँ Name[hne]=डेस्कटाप १० मं जाव Name[hr]=Prebaci se na radnu površinu 10 Name[hu]=Váltás: 10. asztalra -Name[ia]=Cambiar a Scriptorio 10 +Name[ia]=Cambia a Scriptorio 10 Name[id]=Ubah ke Desktop 10 Name[is]=Birta skjáborð 10 Name[it]=Vai al desktop 10 @@ -1800,7 +1800,7 @@ Name[hi]=डेस्कटॉप 11 पर जाएँ Name[hne]=डेस्कटाप ११ मं जाव Name[hr]=Prebaci se na radnu površinu 11 Name[hu]=Váltás: 11. asztalra -Name[ia]=Cambiar a Scriptorio 11 +Name[ia]=Cambia a Scriptorio 11 Name[id]=Ubah ke Desktop 11 Name[is]=Birta skjáborð 11 Name[it]=Vai al desktop 11 @@ -1967,7 +1967,7 @@ Name[hi]=डेस्कटॉप 12 पर जाएँ Name[hne]=डेस्कटाप १२ मं जाव Name[hr]=Prebaci se na radnu površinu 12 Name[hu]=Váltás: 12. asztalra -Name[ia]=Cambiar a Scriptorio 12 +Name[ia]=Cambia a Scriptorio 12 Name[id]=Ubah ke Desktop 12 Name[is]=Birta skjáborð 12 Name[it]=Vai al desktop 12 @@ -2134,7 +2134,7 @@ Name[hi]=डेस्कटॉप 13 पर जाएँ Name[hne]=डेस्कटाप १३ मं जाव Name[hr]=Prebaci se na radnu površinu 13 Name[hu]=Váltás a 13. asztalra -Name[ia]=Cambiar a Scriptorio 13 +Name[ia]=Cambia a Scriptorio 13 Name[id]=Ubah ke Desktop 13 Name[is]=Birta skjáborð 13 Name[it]=Vai al desktop 13 @@ -2302,7 +2302,7 @@ Name[hi]=डेस्कटॉप 14 पर जाएँ Name[hne]=डेस्कटाप १४ मं जाव Name[hr]=Prebaci se na radnu površinu 14 Name[hu]=Váltás a 14. asztalra -Name[ia]=Cambiar a Scriptorio 14 +Name[ia]=Cambia a Scriptorio 14 Name[id]=Ubah ke Desktop 14 Name[is]=Birta skjáborð 14 Name[it]=Vai al desktop 14 @@ -2469,7 +2469,7 @@ Name[hi]=डेस्कटॉप 15 पर जाएँ Name[hne]=डेस्कटाप १५ मं जाव Name[hr]=Prebaci se na radnu površinu 15 Name[hu]=Váltás a 15. asztalra -Name[ia]=Cambiar a Scriptorio 15 +Name[ia]=Cambia a Scriptorio 15 Name[id]=Ubah ke Desktop 15 Name[is]=Birta skjáborð 15 Name[it]=Vai al desktop 15 @@ -2637,7 +2637,7 @@ Name[hi]=डेस्कटॉप 16 पर जाएँ Name[hne]=डेस्कटाप १६ मं जाव Name[hr]=Prebaci se na radnu površinu 16 Name[hu]=Váltás a 16. asztalra -Name[ia]=Cambiar a Scriptorio 16 +Name[ia]=Cambia a Scriptorio 16 Name[id]=Ubah ke Desktop 16 Name[is]=Birta skjáborð 16 Name[it]=Vai al desktop 16 @@ -2805,7 +2805,7 @@ Name[hi]=डेस्कटॉप 17 पर जाएँ Name[hne]=डेस्कटाप १७ मं जाव Name[hr]=Prebaci se na radnu površinu 17 Name[hu]=Váltás a 17. asztalra -Name[ia]=Cambiar a Scriptorio 17 +Name[ia]=Cambia a Scriptorio 17 Name[id]=Ubah ke Desktop 17 Name[is]=Birta skjáborð 17 Name[it]=Vai al desktop 17 @@ -2972,7 +2972,7 @@ Name[hi]=डेस्कटॉप 18 पर जाएँ Name[hne]=डेस्कटाप १८ मं जाव Name[hr]=Prebaci se na radnu površinu 18 Name[hu]=Váltás a 18. asztalra -Name[ia]=Cambiar a Scriptorio 18 +Name[ia]=Cambia a Scriptorio 18 Name[id]=Ubah ke Desktop 18 Name[is]=Birta skjáborð 18 Name[it]=Vai al desktop 18 @@ -3140,7 +3140,7 @@ Name[hi]=डेस्कटॉप 19 पर जाएँ Name[hne]=डेस्कटाप १९ मं जाव Name[hr]=Prebaci se na radnu površinu 19 Name[hu]=Váltás az 19. asztalra -Name[ia]=Cambiar a Scriptorio 19 +Name[ia]=Cambia a Scriptorio 19 Name[id]=Ubah ke Desktop 19 Name[is]=Birta skjáborð 19 Name[it]=Vai al desktop 19 @@ -3308,7 +3308,7 @@ Name[hi]=डेस्कटॉप 20 पर जाएँ Name[hne]=डेस्कटाप २० मं जाव Name[hr]=Prebaci se na radnu površinu 20 Name[hu]=Váltás a 20. asztalra -Name[ia]=Cambiar a Scriptorio 20 +Name[ia]=Cambia a Scriptorio 20 Name[id]=Ubah ke Desktop 20 Name[is]=Birta skjáborð 20 Name[it]=Vai al desktop 20 @@ -3474,7 +3474,7 @@ Name[hi]=विंडो सक्रिय करें Name[hne]=विंडो सक्रिय करव Name[hr]=Aktiviraj prozor Name[hu]=Ablak aktiválása -Name[ia]=Activar Fenestra +Name[ia]=Activa fenestra Name[id]=Aktifkan Jendela Name[is]=Virkja glugga Name[it]=Attiva finestra @@ -3641,7 +3641,7 @@ Name[hne]=नवा विंडो Name[hr]=Novi prozor Name[hsb]=Nowe wokno Name[hu]=Új ablak -Name[ia]=Nove Fenestra +Name[ia]=Nove fenestra Name[id]=Jendela Baru Name[is]=Opna nýjan glugga Name[it]=Nuova finestra @@ -3726,7 +3726,7 @@ Comment[hi]=नया विंडो Comment[hne]=नवा विंडो Comment[hr]=Novi prozor Comment[hu]=Új ablak -Comment[ia]=Nove Fenestra +Comment[ia]=Nove fenestra Comment[id]=Jendela baru Comment[is]=Nýr gluggi Comment[it]=Nuova finestra @@ -3813,7 +3813,7 @@ Name[hi]=विंडो मिटाएँ Name[hne]=विंडो मेटाव Name[hr]=Izbriši prozor Name[hu]=Ablak törlése -Name[ia]=Cancellar fenestra +Name[ia]=Dele fenestra Name[id]=Hapus Jendela Name[is]=Eyða glugga Name[it]=Elimina finestra @@ -3894,7 +3894,7 @@ Comment[hi]=विंडो मिटाएँ Comment[hne]=विंडो मेटाव Comment[hr]=Brisanje prozora Comment[hu]=Ablak törlése -Comment[ia]=Cancellar fenestra +Comment[ia]=Dele fenestra Comment[id]=Hapus jendela Comment[is]=Eyða glugga Comment[it]=Elimina una finestra @@ -3979,7 +3979,7 @@ Name[hi]=विंडो बंद करें Name[hne]=विंडो बंद करव Name[hr]=Zatvori prozor Name[hu]=Ablak bezárása -Name[ia]=Clauder Fenestra +Name[ia]=Claude fenestra Name[id]=Jendela Menutup Name[is]=Gluggi lokast Name[it]=Chiusura di una finestra @@ -4147,7 +4147,7 @@ Name[hi]=विंडो शेड अप Name[hne]=विंडो सेड अप Name[hr]=Zamotaj prozor Name[hu]=Ablak felgördítése -Name[ia]=Adumbrar un fenestra super +Name[ia]=Adumbra un fenestra de supra Name[id]=Jendela Berbayang Ke Atas Name[is]=Glugga rúllað upp Name[it]=Arrotolamento di una finestra @@ -4224,7 +4224,7 @@ Comment[hi]=एक विंडो में छाया भरी गई Comment[hne]=एक विंडो मं छइंहा उपर Comment[hr]=Prozor je zamotan Comment[hu]=Ablak felgördítése -Comment[ia]=Un fenestra es adumbrate super +Comment[ia]=Un fenestra es adumbrate de supra Comment[id]=Sebuah jendela berbayang ke atas Comment[is]=Glugga er rúllað upp Comment[it]=Una finestra viene arrotolata @@ -4305,7 +4305,7 @@ Name[hi]=विंडो शेड डाउन Name[hne]=विंडो सेड डाउन Name[hr]=Odmotaj prozor Name[hu]=Ablak legördítése -Name[ia]=Adumbrar a basso un fenestra +Name[ia]=Adumbra a basso un fenestra Name[id]=Jendela Berbayang Ke Bawah Name[is]=Glugga rúllað niður Name[it]=Srotolamento di una finestra @@ -4460,7 +4460,7 @@ Name[hi]=विंडो न्यूनतम करें Name[hne]=विंडो छोटा Name[hr]=Minimiziraj prozor Name[hu]=Ablak minimalizálása -Name[ia]=Minimizar fenestra +Name[ia]=Minimisa fenestra Name[id]=Jendela Minimal Name[is]=Glugga lágmarkað Name[it]=Minimizzazione di una finestra @@ -4540,7 +4540,7 @@ Comment[hi]=एक विंडो न्यूनतम हुआ Comment[hne]=एक विंडो छोटा होइस Comment[hr]=Prozor je minimiziran Comment[hu]=Ablak minimalizálása -Comment[ia]=Un fenestra es minimizate +Comment[ia]=Un fenestra es minimisate Comment[id]=Sebuah jendela diminimalkan Comment[is]=Gluggi er lágmarkaður Comment[it]=Una finestra viene minimizzata @@ -4623,7 +4623,7 @@ Name[hi]=विंडो न्यूनतम नहीं Name[hne]=विंडो बहाल Name[hr]=Vrati minimiziran prozor Name[hu]=Minimalizált ablak visszaállítása -Name[ia]=Cancellar Minimization de fenestra +Name[ia]=Annulla minimisation de fenestra Name[id]=Jendela Tak Minimalkan Name[is]=Gluggi ekki lágmarkað Name[it]=Ripristino di una finestra @@ -4783,7 +4783,7 @@ Name[hi]=विंडो अधिकतम करें Name[hne]=विंडो बड़ा Name[hr]=Maksimiziraj prozor Name[hu]=Ablak maximalizálása -Name[ia]=Maximizar Fenestra +Name[ia]=Maximiza fenestra Name[id]=Jendela Maksimalkan Name[is]=Gluggi hámarkaður Name[it]=Massimizzazione di una finestra @@ -4948,7 +4948,7 @@ Name[hi]=विंडो अधिकतम नहीं Name[hne]=विंडो बहाल Name[hr]=Vrati maksimiziran prozor Name[hu]=Maximalizált ablak visszaállítása -Name[ia]=Fenestra cancella maximisation +Name[ia]=Annulla maximization de fenestra Name[id]=Jendela Tak Maksimalkan Name[is]=Gluggi úr hámarki Name[it]=De-massimizzazione di una finestra @@ -5107,7 +5107,7 @@ Name[hi]=विंडो सभी डेस्कटॉप पर रखें Name[hne]=सब्बो डेस्कटाप मं विंडो Name[hr]=Prozor na svim radnim površinama Name[hu]=Ablak megjelenése az összes munkaasztalon -Name[ia]=Fenestra su Omne Scriptorios +Name[ia]=Fenestra sur omne scriptorios Name[id]=Jendela di Semua Desktop Name[is]=Glugga á öll skjáborð Name[it]=Finestra su tutti i desktop @@ -5184,7 +5184,7 @@ Comment[hi]=एक विंडो सभी डेस्कटॉप पर द Comment[hne]=एक विंडो सब्बो डेस्कटाप मं दिखही Comment[hr]=Prozor je vidljiv na svim radnim površinama Comment[hu]=Egy ablak megjelent az összes munkaasztalon -Comment[ia]=Un fenestra es facite visibile super omne scriptorios +Comment[ia]=Un fenestra es facite visibile sur omne scriptorios Comment[id]=Sebuah jendela dibuat agar tampak pada semua desktop Comment[is]=Gluggi er látinn sjást á öllum skjáborðum Comment[it]=Una finestra è resa visibile su tutti i desktop @@ -5265,7 +5265,7 @@ Name[hi]=सभी डेस्कटॉप पर विंडो नहीं Name[hne]=विंडो सब्बो डेस्कटाप मं नइ Name[hr]=Prozor nije na svim radnim površinama Name[hu]=Ablak megjelenése egyetlen munkaasztalon -Name[ia]=Fenestra Non super omne Scriptorios +Name[ia]=Fenestra non super omne scriptorios Name[id]=Jendela Tidak di Semua Desktop Name[is]=Gluggi ekki á öllum skjáborðum Name[it]=Finestra non su tutti i desktop @@ -5426,7 +5426,7 @@ Name[hi]=नया संवाद Name[hne]=नवा गोठ Name[hr]=Novi dijalog Name[hu]=Új párbeszédablak -Name[ia]=Nove Dialogo +Name[ia]=Nove dialogo Name[id]=Dialog Baru Name[is]=Opna nýjan glugga Name[it]=Nuova finestra di dialogo @@ -5505,7 +5505,7 @@ Comment[hi]=ट्रांजिएंट विंडो (एक संवा Comment[hne]=ट्रांजिएन्ट विंडो (एक बात) दिखिस Comment[hr]=Pojavljuje se prijelazni prozor (dijalog) Comment[hu]=Párbeszédablak megjelenése -Comment[ia]=Il appare un Fenestra Transitori (un dialogo) +Comment[ia]=Il appare un fenestra transitori (un dialogo) Comment[id]=Jendela fana (sebuah dialog) muncul Comment[is]=Skammlífur samskiptagluggi birtist Comment[it]=Appare una finestra di dialogo @@ -5587,7 +5587,7 @@ Name[hi]=संवाद मिटाएँ Name[hne]=बात ल मेटाव Name[hr]=Izbriši dijalog Name[hu]=Párbeszédablak eltűnése -Name[ia]=Cancellar Dialogo +Name[ia]=Dele dialogo Name[id]=Hapus Dialog Name[is]=Eyða samskiptaglugga Name[it]=Scomparsa di una finestra di dialogo @@ -5745,7 +5745,7 @@ Name[hi]=विंडो खिसकाना चालू Name[hne]=विंडो खिसकाय बर सुरु Name[hr]=Početak micanja prozora Name[hu]=Ablakmozgatás kezdete -Name[ia]=Initiar a Mover Fenestra +Name[ia]=Initia a mover Fenestra Name[id]=Jendela Mulai Pindah Name[is]=Færsla glugga hefst Name[it]=Inizio dello spostamento di una finestra @@ -5903,7 +5903,7 @@ Name[hi]=विंडो खिसकाना ख़त्म Name[hne]=विंडो खिसकाय बर बन्द Name[hr]=Završetak micanja prozora Name[hu]=Ablakmozgatás vége -Name[ia]=Fin de Mover de Fenestra +Name[ia]=Fin de mover de fenestra Name[id]=Jendela Selesai Pindah Name[is]=Færslu glugga lýkur Name[it]=Fine dello spostamento di una finestra @@ -6061,7 +6061,7 @@ Name[hi]=विंडो नया-आकार चालू Name[hne]=विंडो के नवा आकार दे बर सुरू Name[hr]=Početak promjene veličine Name[hu]=Ablakátméretezés kezdete -Name[ia]=Initio de Redimensionar de Fenestra +Name[ia]=Initio de redimensionar de Fenestra Name[id]=Jendela Mulai Berubah Ukuran Name[is]=Stærðarbreyting glugga hefst Name[it]=Inizio del ridimensionamento di una finestra @@ -6219,7 +6219,7 @@ Name[hi]=विंडो नया-आकार बन्द Name[hne]=विंडो नवा आकार देना पूरा Name[hr]=Završetak promjene veličine Name[hu]=Ablakátméretezés vége -Name[ia]=Fin de Re-dimension de Fenestra +Name[ia]=Fin de re-dimension de fenestra Name[id]=Jendela Selesai Berubah Ukuran Name[is]=Stærðarbreyting glugga lýkur Name[it]=Fine del ridimensionamento di una finestra @@ -6373,7 +6373,7 @@ Name[hi]=वर्तमान डेस्कटॉप का विंडो Name[hne]=हाल वाले डेस्कटाप के विंडो हर आपमन के ध्यान चाहथे Name[hr]=Prozor na trenutnoj radnoj površini zahtijeva pažnju Name[hu]=Egy ablak az aktuális asztalon beavatkozást igényel -Name[ia]=Fenestra in le Scriptorio Currente Demanda Attention +Name[ia]=Fenestra in le scriptorio currente demanda attention Name[id]=Jendela di Desktop Saat Ini Meminta Perhatian Name[is]=Gluggi á öðru skjáborði krefst athygli Name[it]=Finestra sul desktop attuale richiede attenzione @@ -6517,7 +6517,7 @@ Name[hi]=अन्य डेस्कटॉप का विंडो आपक Name[hne]=दूसरा डेस्कटाप के विंडो ध्यान चाहथे Name[hr]=Prozor na drugoj radnoj površini zahtijeva pažnju Name[hu]=Egy ablak valamelyik nem látszó asztalon beavatkozást igényel -Name[ia]=Fenestra in altere Scriptorio demanda attention +Name[ia]=Fenestra in altere scriptorio demanda attention Name[id]=Jendela di Desktop Lain Meminta Perhatian Name[is]=Gluggi á öðru skjáborði krefst athygli Name[it]=Finestra su un altro desktop richiede attenzione @@ -6963,7 +6963,7 @@ Comment[gl]=Algúns efectos non están soportados nin pola infraestrutura nin po Comment[he]=כמה אפקטים אינם נתמכים על ידי המנגנון או החומרה Comment[hr]=Neki efekti nisu podržani od strane hardvera Comment[hu]=Néhány effektust nem támogat a háttérmodul vagy a hardver. -Comment[ia]=Alicun effectos non es supportate per retro-parte (backend) o hardware +Comment[ia]=Alicun effectos non es supportate per retro-administration o hardware Comment[id]=Beberapa efek tidak didukung oleh ujung belakang atau peranti keras. Comment[is]=Sumt af myndbrellunum eru ekki studdar af bakendanum eða vélbúnaði. Comment[it]=Alcuni effetti non sono supportati dal motore o dall'hardware. @@ -7022,7 +7022,7 @@ Name[ga]=Tíliú Cumasaithe Name[he]=ריצוף אופשר Name[hi]=टायलिग सक्षम Name[hr]=Slaganje omogućeno -Name[ia]=Tegulas Habilitate +Name[ia]=Tegulas habilitate Name[id]=Pengubinan Diaktifkan Name[it]=Affiancamento abilitato Name[ja]=タイリングが有効 @@ -7069,7 +7069,7 @@ Comment[fr]=Le mode des fenêtres en mosaïque a été activé. Comment[ga]=Cumasaíodh an mód tílithe Comment[he]=מצב ריצוף אופשר Comment[hr]=Omogućeno je slaganje -Comment[ia]=Le modo de tegula ha essite habilitate +Comment[ia]=Le modo de tegulas ha essite habilitate Comment[id]=Mode pengubinan telah diaktifkan Comment[it]=La modalità di affiancamento è stata attivata Comment[ja]=タイリングモードが有効になりました @@ -7167,7 +7167,7 @@ Comment[fr]=Le mode des fenêtres en mosaïque a été désactivé. Comment[ga]=Díchumasaíodh an mód tílithe Comment[he]=מצב ריצוף הופסק Comment[hr]=Popločavanje je onemogućeno -Comment[ia]=Le mode de Tegulas ha essite dishabilitate +Comment[ia]=Le mode de tegulas ha essite dishabilitate Comment[id]=Tombol pengubinan telah dinonaktifkan Comment[it]=La modalità di affiancamento è stata disattivata Comment[ja]=タイリングモードが無効になりました @@ -7218,7 +7218,7 @@ Name[ga]=Athraíodh Leagan Amach na dTíleanna Name[he]=פריסת ריצוף שונתה Name[hi]=टायलिंग खाका बदला Name[hr]=Promijenjen je raspored slaganja -Name[ia]=Disposition a Tegulas Modificate +Name[ia]=Disposition a tegulas modificate Name[id]=Tata Letak Pengubinan Diubah Name[it]=Schema di affiancamento modificato Name[ja]=タイリング配列が変更 @@ -7266,7 +7266,7 @@ Comment[ga]=Athraíodh leagan amach na dtíleanna Comment[he]=פריסת ריצוף שונתה Comment[hi]=टायलिंग खाका बदला गया Comment[hr]=Promijenjen je raspored slaganja -Comment[ia]=Le disposition a Tegulas ha essite cambiate +Comment[ia]=Le disposition a tegulas ha essite cambiate Comment[id]=Tata Letak Pengubinan telah diubah Comment[it]=Lo schema di affiancamento è stato modificato Comment[ja]=タイリング配列が変更されました diff --git a/kwinbindings.cpp b/kwinbindings.cpp index 0a2c1fc290..06ed2e8ec4 100644 --- a/kwinbindings.cpp +++ b/kwinbindings.cpp @@ -25,28 +25,35 @@ along with this program. If not, see . // Some shortcuts have Tarzan-speech like names, they need extra // normal human descriptions with DEF2() the others can use DEF() +// new DEF3 allows to pass data to the action, replacing the %1 argument in the name + #ifndef NOSLOTS -# define DEF2( name, descr, key, fnSlot ) \ - a = actionCollection->addAction( name ); \ - a->setText( i18n(descr) ); \ - qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \ - connect(a, SIGNAL(triggered(bool)), SLOT(fnSlot)) -# define DEF( name, key, fnSlot ) \ - a = actionCollection->addAction( name ); \ - a->setText( i18n(name) ); \ - qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \ - connect(a, SIGNAL(triggered(bool)), SLOT(fnSlot)) +#define KWIN_CONNECT(_FNSLOT_) connect(a, SIGNAL(triggered(bool)), SLOT(_FNSLOT_)); #else -# define DEF2( name, descr, key, fnSlot ) \ - a = actionCollection->addAction( name ); \ - a->setText( i18n(descr) ); \ - qobject_cast( a )->setGlobalShortcut(KShortcut(key)); -# define DEF( name, key, fnSlot ) \ - a = actionCollection->addAction( name ); \ - a->setText( i18n(name) ); \ - qobject_cast( a )->setGlobalShortcut(KShortcut(key)); +#define KWIN_CONNECT(_FNSLOT_) /*noop*/ #endif +#define DEF2( name, descr, key, fnSlot ) \ + a = actionCollection->addAction( name ); \ + a->setText( i18n(descr) ); \ + qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \ + KWIN_CONNECT(fnSlot) + +#define DEF4( name, descr, key, fnSlot, value ) \ + DEF2(name, descr, key, fnSlot) \ + a->setData(value); + +#define DEF( name, key, fnSlot ) \ + DEF2(name, name, key, fnSlot) + +#define DEF3( name, key, fnSlot, value ) \ + a = actionCollection->addAction( QString(name).arg(value) ); \ + a->setText( i18n(name, value) ); \ + qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \ + a->setData(value); \ + KWIN_CONNECT(fnSlot) + + a = actionCollection->addAction("Program:kwin"); a->setText(i18n("System")); @@ -143,79 +150,44 @@ a = actionCollection->addAction("Group:Window Desktop"); a->setText(i18n("Window & Desktop")); DEF2("Window On All Desktops", I18N_NOOP("Keep Window on All Desktops"), 0, slotWindowOnAllDesktops()); -DEF(I18N_NOOP("Window to Desktop 1"), 0, slotWindowToDesktop1()); -DEF(I18N_NOOP("Window to Desktop 2"), 0, slotWindowToDesktop2()); -DEF(I18N_NOOP("Window to Desktop 3"), 0, slotWindowToDesktop3()); -DEF(I18N_NOOP("Window to Desktop 4"), 0, slotWindowToDesktop4()); -DEF(I18N_NOOP("Window to Desktop 5"), 0, slotWindowToDesktop5()); -DEF(I18N_NOOP("Window to Desktop 6"), 0, slotWindowToDesktop6()); -DEF(I18N_NOOP("Window to Desktop 7"), 0, slotWindowToDesktop7()); -DEF(I18N_NOOP("Window to Desktop 8"), 0, slotWindowToDesktop8()); -DEF(I18N_NOOP("Window to Desktop 9"), 0, slotWindowToDesktop9()); -DEF(I18N_NOOP("Window to Desktop 10"), 0, slotWindowToDesktop10()); -DEF(I18N_NOOP("Window to Desktop 11"), 0, slotWindowToDesktop11()); -DEF(I18N_NOOP("Window to Desktop 12"), 0, slotWindowToDesktop12()); -DEF(I18N_NOOP("Window to Desktop 13"), 0, slotWindowToDesktop13()); -DEF(I18N_NOOP("Window to Desktop 14"), 0, slotWindowToDesktop14()); -DEF(I18N_NOOP("Window to Desktop 15"), 0, slotWindowToDesktop15()); -DEF(I18N_NOOP("Window to Desktop 16"), 0, slotWindowToDesktop16()); -DEF(I18N_NOOP("Window to Desktop 17"), 0, slotWindowToDesktop17()); -DEF(I18N_NOOP("Window to Desktop 18"), 0, slotWindowToDesktop18()); -DEF(I18N_NOOP("Window to Desktop 19"), 0, slotWindowToDesktop19()); -DEF(I18N_NOOP("Window to Desktop 20"), 0, slotWindowToDesktop20()); + +for (int i = 1; i < 21; ++i) { + DEF3(I18N_NOOP("Window to Desktop %1"), 0, slotWindowToDesktop(), i); +} DEF(I18N_NOOP("Window to Next Desktop"), 0, slotWindowToNextDesktop()); DEF(I18N_NOOP("Window to Previous Desktop"), 0, slotWindowToPreviousDesktop()); DEF(I18N_NOOP("Window One Desktop to the Right"), 0, slotWindowToDesktopRight()); DEF(I18N_NOOP("Window One Desktop to the Left"), 0, slotWindowToDesktopLeft()); DEF(I18N_NOOP("Window One Desktop Up"), 0, slotWindowToDesktopUp()); DEF(I18N_NOOP("Window One Desktop Down"), 0, slotWindowToDesktopDown()); -DEF(I18N_NOOP("Window to Screen 0"), 0, slotWindowToScreen0()); -DEF(I18N_NOOP("Window to Screen 1"), 0, slotWindowToScreen1()); -DEF(I18N_NOOP("Window to Screen 2"), 0, slotWindowToScreen2()); -DEF(I18N_NOOP("Window to Screen 3"), 0, slotWindowToScreen3()); -DEF(I18N_NOOP("Window to Screen 4"), 0, slotWindowToScreen4()); -DEF(I18N_NOOP("Window to Screen 5"), 0, slotWindowToScreen5()); -DEF(I18N_NOOP("Window to Screen 6"), 0, slotWindowToScreen6()); -DEF(I18N_NOOP("Window to Screen 7"), 0, slotWindowToScreen7()); + +for (int i = 0; i < 8; ++i) { + DEF3(I18N_NOOP("Window to Screen %1"), 0, slotWindowToScreen(), i); +} DEF(I18N_NOOP("Window to Next Screen"), 0, slotWindowToNextScreen()); DEF(I18N_NOOP("Show Desktop"), 0, slotToggleShowDesktop()); a = actionCollection->addAction("Group:Desktop Switching"); a->setText(i18n("Desktop Switching")); -DEF(I18N_NOOP("Switch to Desktop 1"), Qt::CTRL + Qt::Key_F1, slotSwitchToDesktop1()); -DEF(I18N_NOOP("Switch to Desktop 2"), Qt::CTRL + Qt::Key_F2, slotSwitchToDesktop2()); -DEF(I18N_NOOP("Switch to Desktop 3"), Qt::CTRL + Qt::Key_F3, slotSwitchToDesktop3()); -DEF(I18N_NOOP("Switch to Desktop 4"), Qt::CTRL + Qt::Key_F4, slotSwitchToDesktop4()); -DEF(I18N_NOOP("Switch to Desktop 5"), 0, slotSwitchToDesktop5()); -DEF(I18N_NOOP("Switch to Desktop 6"), 0, slotSwitchToDesktop6()); -DEF(I18N_NOOP("Switch to Desktop 7"), 0, slotSwitchToDesktop7()); -DEF(I18N_NOOP("Switch to Desktop 8"), 0, slotSwitchToDesktop8()); -DEF(I18N_NOOP("Switch to Desktop 9"), 0, slotSwitchToDesktop9()); -DEF(I18N_NOOP("Switch to Desktop 10"), 0, slotSwitchToDesktop10()); -DEF(I18N_NOOP("Switch to Desktop 11"), 0, slotSwitchToDesktop11()); -DEF(I18N_NOOP("Switch to Desktop 12"), 0, slotSwitchToDesktop12()); -DEF(I18N_NOOP("Switch to Desktop 13"), 0, slotSwitchToDesktop13()); -DEF(I18N_NOOP("Switch to Desktop 14"), 0, slotSwitchToDesktop14()); -DEF(I18N_NOOP("Switch to Desktop 15"), 0, slotSwitchToDesktop15()); -DEF(I18N_NOOP("Switch to Desktop 16"), 0, slotSwitchToDesktop16()); -DEF(I18N_NOOP("Switch to Desktop 17"), 0, slotSwitchToDesktop17()); -DEF(I18N_NOOP("Switch to Desktop 18"), 0, slotSwitchToDesktop18()); -DEF(I18N_NOOP("Switch to Desktop 19"), 0, slotSwitchToDesktop19()); -DEF(I18N_NOOP("Switch to Desktop 20"), 0, slotSwitchToDesktop20()); +DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F1, slotSwitchToDesktop(), 1); +DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F2, slotSwitchToDesktop(), 2); +DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F3, slotSwitchToDesktop(), 3); +DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F4, slotSwitchToDesktop(), 4); +for (int i = 5; i < 21; ++i) { + DEF3(I18N_NOOP("Switch to Desktop %1"), 0, slotSwitchToDesktop(), i); +} + DEF(I18N_NOOP("Switch to Next Desktop"), 0, slotSwitchDesktopNext()); DEF(I18N_NOOP("Switch to Previous Desktop"), 0, slotSwitchDesktopPrevious()); DEF(I18N_NOOP("Switch One Desktop to the Right"), 0, slotSwitchDesktopRight()); DEF(I18N_NOOP("Switch One Desktop to the Left"), 0, slotSwitchDesktopLeft()); DEF(I18N_NOOP("Switch One Desktop Up"), 0, slotSwitchDesktopUp()); DEF(I18N_NOOP("Switch One Desktop Down"), 0, slotSwitchDesktopDown()); -DEF(I18N_NOOP("Switch to Screen 0"), 0, slotSwitchToScreen0()); -DEF(I18N_NOOP("Switch to Screen 1"), 0, slotSwitchToScreen1()); -DEF(I18N_NOOP("Switch to Screen 2"), 0, slotSwitchToScreen2()); -DEF(I18N_NOOP("Switch to Screen 3"), 0, slotSwitchToScreen3()); -DEF(I18N_NOOP("Switch to Screen 4"), 0, slotSwitchToScreen4()); -DEF(I18N_NOOP("Switch to Screen 5"), 0, slotSwitchToScreen5()); -DEF(I18N_NOOP("Switch to Screen 6"), 0, slotSwitchToScreen6()); -DEF(I18N_NOOP("Switch to Screen 7"), 0, slotSwitchToScreen7()); + +for (int i = 0; i < 8; ++i) { + DEF3(I18N_NOOP("Switch to Screen %1"), 0, slotSwitchToScreen(), i); +} + DEF(I18N_NOOP("Switch to Next Screen"), 0, slotSwitchToNextScreen()); a = actionCollection->addAction("Group:Miscellaneous"); diff --git a/manage.cpp b/manage.cpp index 135a0166fa..a802623818 100644 --- a/manage.cpp +++ b/manage.cpp @@ -591,6 +591,8 @@ bool Client::manage(Window w, bool isMapped) workspace()->discardUsedWindowRules(this, false); // Remove ApplyNow rules updateWindowRules(); // Was blocked while !isManaged() + updateCompositeBlocking(true); + // TODO: there's a small problem here - isManaged() depends on the mapping state, // but this client is not yet in Workspace's client list at this point, will // be only done in addClient() diff --git a/rules.cpp b/rules.cpp index 9e4136a241..1587064d2b 100644 --- a/rules.cpp +++ b/rules.cpp @@ -66,6 +66,7 @@ Rules::Rules() , belowrule(UnusedSetRule) , fullscreenrule(UnusedSetRule) , noborderrule(UnusedSetRule) + , blockcompositingrule(UnusedForceRule) , fsplevelrule(UnusedForceRule) , acceptfocusrule(UnusedForceRule) , moveresizemoderule(UnusedForceRule) @@ -173,6 +174,7 @@ void Rules::readFromCfg(const KConfigGroup& cfg) READ_SET_RULE(below, , false); READ_SET_RULE(fullscreen, , false); READ_SET_RULE(noborder, , false); + READ_FORCE_RULE(blockcompositing, , false); READ_FORCE_RULE(fsplevel, limit0to4, 0); // fsp is 0-4 READ_FORCE_RULE(acceptfocus, , false); READ_FORCE_RULE(moveresizemode, Options::stringToMoveResizeMode, QString()); @@ -262,6 +264,7 @@ void Rules::write(KConfigGroup& cfg) const WRITE_SET_RULE(below,); WRITE_SET_RULE(fullscreen,); WRITE_SET_RULE(noborder,); + WRITE_FORCE_RULE(blockcompositing,); WRITE_FORCE_RULE(fsplevel,); WRITE_FORCE_RULE(acceptfocus,); WRITE_FORCE_RULE(moveresizemode, Options::moveResizeModeToString); @@ -303,6 +306,7 @@ bool Rules::isEmpty() const && belowrule == UnusedSetRule && fullscreenrule == UnusedSetRule && noborderrule == UnusedSetRule + && blockcompositingrule == UnusedForceRule && fsplevelrule == UnusedForceRule && acceptfocusrule == UnusedForceRule && moveresizemoderule == UnusedForceRule @@ -612,6 +616,7 @@ APPLY_RULE(above, KeepAbove, bool) APPLY_RULE(below, KeepBelow, bool) APPLY_RULE(fullscreen, FullScreen, bool) APPLY_RULE(noborder, NoBorder, bool) +APPLY_FORCE_RULE(blockcompositing, BlockCompositing, bool) APPLY_FORCE_RULE(fsplevel, FSP, int) APPLY_FORCE_RULE(acceptfocus, AcceptFocus, bool) APPLY_FORCE_RULE(moveresizemode, MoveResizeMode, Options::MoveResizeMode) @@ -678,6 +683,7 @@ void Rules::discardUsed(bool withdrawn) DISCARD_USED_SET_RULE(below); DISCARD_USED_SET_RULE(fullscreen); DISCARD_USED_SET_RULE(noborder); + DISCARD_USED_FORCE_RULE(blockcompositing); DISCARD_USED_FORCE_RULE(fsplevel); DISCARD_USED_FORCE_RULE(acceptfocus); DISCARD_USED_FORCE_RULE(moveresizemode); @@ -801,6 +807,7 @@ CHECK_RULE(KeepAbove, bool) CHECK_RULE(KeepBelow, bool) CHECK_RULE(FullScreen, bool) CHECK_RULE(NoBorder, bool) +CHECK_FORCE_RULE(BlockCompositing, bool) CHECK_FORCE_RULE(FSP, int) CHECK_FORCE_RULE(AcceptFocus, bool) CHECK_FORCE_RULE(MoveResizeMode, Options::MoveResizeMode) diff --git a/rules.h b/rules.h index 87b205574a..84a8df16be 100644 --- a/rules.h +++ b/rules.h @@ -75,6 +75,7 @@ public: bool checkKeepBelow(bool below, bool init = false) const; bool checkFullScreen(bool fs, bool init = false) const; bool checkNoBorder(bool noborder, bool init = false) const; + bool checkBlockCompositing(bool block) const; int checkFSP(int fsp) const; bool checkAcceptFocus(bool focus) const; Options::MoveResizeMode checkMoveResizeMode(Options::MoveResizeMode mode) const; @@ -132,6 +133,7 @@ public: bool applyKeepBelow(bool& below, bool init) const; bool applyFullScreen(bool& fs, bool init) const; bool applyNoBorder(bool& noborder, bool init) const; + bool applyBlockCompositing(bool& block) const; bool applyFSP(int& fsp) const; bool applyAcceptFocus(bool& focus) const; bool applyMoveResizeMode(Options::MoveResizeMode& mode) const; @@ -244,6 +246,8 @@ private: SetRule fullscreenrule; bool noborder; SetRule noborderrule; + bool blockcompositing; + ForceRule blockcompositingrule; int fsplevel; ForceRule fsplevelrule; bool acceptfocus; diff --git a/useractions.cpp b/useractions.cpp index 2cf21b86b9..d969def142 100644 --- a/useractions.cpp +++ b/useractions.cpp @@ -1166,14 +1166,30 @@ void Workspace::slotSwitchDesktopDown() setCurrentDesktop(desktop); } -void Workspace::slotSwitchToDesktop(int i) +static int senderValue(QObject *sender) { - setCurrentDesktop(i); + QAction *act = qobject_cast(sender); + bool ok = false; int i = -1; + if (act) + i = act->data().toUInt(&ok); + if (ok) + return i; + return -1; +} + +void Workspace::slotSwitchToDesktop() +{ + const int i = senderValue(sender()); + if (i > 0) + setCurrentDesktop(i); } -void Workspace::slotWindowToDesktop(int i) +void Workspace::slotWindowToDesktop() { + const int i = senderValue(sender()); + if (i < 1) + return; Client* c = active_popup_client ? active_popup_client : active_client; if (i >= 1 && i <= numberOfDesktops() && c && !c->isDesktop() @@ -1182,18 +1198,23 @@ void Workspace::slotWindowToDesktop(int i) sendClientToDesktop(c, i, true); } -void Workspace::slotSwitchToScreen(int i) +void Workspace::slotSwitchToScreen() { - setCurrentScreen(i); + const int i = senderValue(sender()); + if (i > -1) + setCurrentScreen(i); } void Workspace::slotSwitchToNextScreen() { - slotSwitchToScreen((activeScreen() + 1) % numScreens()); + setCurrentScreen((activeScreen() + 1) % numScreens()); } -void Workspace::slotWindowToScreen(int i) +void Workspace::slotWindowToScreen() { + const int i = senderValue(sender()); + if (i < 0) + return; Client* c = active_popup_client ? active_popup_client : active_client; if (i >= 0 && i <= numScreens() && c && !c->isDesktop() diff --git a/workspace.cpp b/workspace.cpp index 77b9dcb602..55a3f45eb6 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -151,6 +151,7 @@ Workspace::Workspace(bool restore) , forced_global_mouse_grab(false) , cm_selection(NULL) , compositingSuspended(false) + , compositingBlocked(false) , xrrRefreshRate(0) , overlay(None) , overlay_visible(true) @@ -702,6 +703,8 @@ void Workspace::removeClient(Client* c, allowed_t) updateStackingOrder(true); + updateCompositeBlocking(); + if (tab_grab) tab_box->reset(true); @@ -1170,20 +1173,8 @@ void Workspace::loadDesktopSettings() else groupname.sprintf("Desktops-screen-%d", screen_number); KConfigGroup group(c, groupname); - - int n = group.readEntry("Number", 4); - desktopCount_ = n; - workarea.clear(); - workarea.resize(n + 1); - restrictedmovearea.clear(); - restrictedmovearea.resize(n + 1); - oldrestrictedmovearea.clear(); - oldrestrictedmovearea.resize(n + 1); - screenarea.clear(); - rootInfo->setNumberOfDesktops(n); - desktop_focus_chain.resize(n); - // Make it +1, so that it can be accessed as [1..numberofdesktops] - focus_chain.resize(n + 1); + const int n = group.readEntry("Number", 4); + setNumberOfDesktops(n); for (int i = 1; i <= n; i++) { QString s = group.readEntry(QString("Name_%1").arg(i), i18n("Desktop %1", i)); rootInfo->setDesktopName(i, s.toUtf8().data()); @@ -1643,40 +1634,33 @@ void Workspace::setNumberOfDesktops(int n) desktopCount_ = n; updateDesktopLayout(); // Make sure the layout is still valid - if (currentDesktop() > numberOfDesktops()) - setCurrentDesktop(numberOfDesktops()); + if (currentDesktop() > n) + setCurrentDesktop(n); - // If increasing the number, do the resizing now, otherwise - // after the moving of windows to still existing desktops - if (old_number_of_desktops < numberOfDesktops()) { - rootInfo->setNumberOfDesktops(numberOfDesktops()); - NETPoint* viewports = new NETPoint[numberOfDesktops()]; - rootInfo->setDesktopViewport(numberOfDesktops(), *viewports); - delete[] viewports; - updateClientArea(true); - focus_chain.resize(numberOfDesktops() + 1); - } - - // If the number of desktops decreased, move all windows - // that would be hidden to the last visible desktop + // move all windows that would be hidden to the last visible desktop if (old_number_of_desktops > numberOfDesktops()) { - for (ClientList::ConstIterator it = clients.constBegin(); - it != clients.constEnd(); - ++it) + for (ClientList::ConstIterator it = clients.constBegin(); it != clients.constEnd(); ++it) { if (!(*it)->isOnAllDesktops() && (*it)->desktop() > numberOfDesktops()) sendClientToDesktop(*it, numberOfDesktops(), true); - // TODO: Tile should have a method allClients, push them into other tiles - } - if (old_number_of_desktops > numberOfDesktops()) { - rootInfo->setNumberOfDesktops(numberOfDesktops()); - NETPoint* viewports = new NETPoint[numberOfDesktops()]; - rootInfo->setDesktopViewport(numberOfDesktops(), *viewports); - delete[] viewports; - updateClientArea(true); - focus_chain.resize(numberOfDesktops() + 1); + // TODO: Tile should have a method allClients, push them into other tiles + } } + rootInfo->setNumberOfDesktops(n); + NETPoint* viewports = new NETPoint[n]; + rootInfo->setDesktopViewport(n, *viewports); + delete[] viewports; + updateClientArea(true); - saveDesktopSettings(); + // Make it +1, so that it can be accessed as [1..numberofdesktops] + focus_chain.resize(n + 1); + + workarea.clear(); + workarea.resize(n + 1); + restrictedmovearea.clear(); + restrictedmovearea.resize(n + 1); + oldrestrictedmovearea.clear(); + oldrestrictedmovearea.resize(n + 1); + screenarea.clear(); // Resize and reset the desktop focus chain. desktop_focus_chain.resize(n); @@ -1687,6 +1671,8 @@ void Workspace::setNumberOfDesktops(int n) // reset the desktop change osd desktop_change_osd->numberDesktopsChanged(); + + saveDesktopSettings(); emit numberDesktopsChanged(old_number_of_desktops); } @@ -1697,6 +1683,8 @@ void Workspace::setNumberOfDesktops(int n) */ void Workspace::sendClientToDesktop(Client* c, int desk, bool dont_activate) { + if (desk < 1 || desk > numberOfDesktops()) + return; int old_desktop = c->desktop(); bool was_on_desktop = c->isOnDesktop(desk) || c->isOnAllDesktops(); c->setDesktop(desk); diff --git a/workspace.h b/workspace.h index 3f6ad49e64..6284487429 100644 --- a/workspace.h +++ b/workspace.h @@ -404,6 +404,7 @@ public: void toggleEffect(const QString& name); void reconfigureEffect(const QString& name); void unloadEffect(const QString& name); + void updateCompositeBlocking(Client* c = NULL); QStringList loadedEffects() const; QStringList listOfEffects() const; @@ -563,180 +564,13 @@ public slots: void slotSwitchDesktopUp(); void slotSwitchDesktopDown(); - void slotSwitchToDesktop(int); - void slotSwitchToDesktop1() { - return slotSwitchToDesktop(1); - } - void slotSwitchToDesktop2() { - return slotSwitchToDesktop(2); - } - void slotSwitchToDesktop3() { - return slotSwitchToDesktop(3); - } - void slotSwitchToDesktop4() { - return slotSwitchToDesktop(4); - } - void slotSwitchToDesktop5() { - return slotSwitchToDesktop(5); - } - void slotSwitchToDesktop6() { - return slotSwitchToDesktop(6); - } - void slotSwitchToDesktop7() { - return slotSwitchToDesktop(7); - } - void slotSwitchToDesktop8() { - return slotSwitchToDesktop(8); - } - void slotSwitchToDesktop9() { - return slotSwitchToDesktop(9); - } - void slotSwitchToDesktop10() { - return slotSwitchToDesktop(10); - } - void slotSwitchToDesktop11() { - return slotSwitchToDesktop(11); - } - void slotSwitchToDesktop12() { - return slotSwitchToDesktop(12); - } - void slotSwitchToDesktop13() { - return slotSwitchToDesktop(13); - } - void slotSwitchToDesktop14() { - return slotSwitchToDesktop(14); - } - void slotSwitchToDesktop15() { - return slotSwitchToDesktop(15); - } - void slotSwitchToDesktop16() { - return slotSwitchToDesktop(16); - } - void slotSwitchToDesktop17() { - return slotSwitchToDesktop(17); - } - void slotSwitchToDesktop18() { - return slotSwitchToDesktop(18); - } - void slotSwitchToDesktop19() { - return slotSwitchToDesktop(19); - } - void slotSwitchToDesktop20() { - return slotSwitchToDesktop(20); - } + void slotSwitchToDesktop(); //void slotSwitchToWindow( int ); - void slotWindowToDesktop(int); - void slotWindowToDesktop1() { - return slotWindowToDesktop(1); - } - void slotWindowToDesktop2() { - return slotWindowToDesktop(2); - } - void slotWindowToDesktop3() { - return slotWindowToDesktop(3); - } - void slotWindowToDesktop4() { - return slotWindowToDesktop(4); - } - void slotWindowToDesktop5() { - return slotWindowToDesktop(5); - } - void slotWindowToDesktop6() { - return slotWindowToDesktop(6); - } - void slotWindowToDesktop7() { - return slotWindowToDesktop(7); - } - void slotWindowToDesktop8() { - return slotWindowToDesktop(8); - } - void slotWindowToDesktop9() { - return slotWindowToDesktop(9); - } - void slotWindowToDesktop10() { - return slotWindowToDesktop(10); - } - void slotWindowToDesktop11() { - return slotWindowToDesktop(11); - } - void slotWindowToDesktop12() { - return slotWindowToDesktop(12); - } - void slotWindowToDesktop13() { - return slotWindowToDesktop(13); - } - void slotWindowToDesktop14() { - return slotWindowToDesktop(14); - } - void slotWindowToDesktop15() { - return slotWindowToDesktop(15); - } - void slotWindowToDesktop16() { - return slotWindowToDesktop(16); - } - void slotWindowToDesktop17() { - return slotWindowToDesktop(17); - } - void slotWindowToDesktop18() { - return slotWindowToDesktop(18); - } - void slotWindowToDesktop19() { - return slotWindowToDesktop(19); - } - void slotWindowToDesktop20() { - return slotWindowToDesktop(20); - } + void slotWindowToDesktop(); + //void slotWindowToListPosition( int ); - void slotSwitchToScreen(int); - void slotSwitchToScreen0() { - return slotSwitchToScreen(0); - } - void slotSwitchToScreen1() { - return slotSwitchToScreen(1); - } - void slotSwitchToScreen2() { - return slotSwitchToScreen(2); - } - void slotSwitchToScreen3() { - return slotSwitchToScreen(3); - } - void slotSwitchToScreen4() { - return slotSwitchToScreen(4); - } - void slotSwitchToScreen5() { - return slotSwitchToScreen(5); - } - void slotSwitchToScreen6() { - return slotSwitchToScreen(6); - } - void slotSwitchToScreen7() { - return slotSwitchToScreen(7); - } - void slotWindowToScreen(int); - void slotWindowToScreen0() { - return slotWindowToScreen(0); - } - void slotWindowToScreen1() { - return slotWindowToScreen(1); - } - void slotWindowToScreen2() { - return slotWindowToScreen(2); - } - void slotWindowToScreen3() { - return slotWindowToScreen(3); - } - void slotWindowToScreen4() { - return slotWindowToScreen(4); - } - void slotWindowToScreen5() { - return slotWindowToScreen(5); - } - void slotWindowToScreen6() { - return slotWindowToScreen(6); - } - void slotWindowToScreen7() { - return slotWindowToScreen(7); - } + void slotSwitchToScreen(); + void slotWindowToScreen(); void slotSwitchToNextScreen(); void slotWindowToNextScreen(); void slotToggleShowDesktop(); @@ -1183,7 +1017,7 @@ private: friend class StackingUpdatesBlocker; KSelectionOwner* cm_selection; - bool compositingSuspended; + bool compositingSuspended, compositingBlocked; QBasicTimer compositeTimer; qint64 nextPaintReference; QTimer mousePollingTimer;