Compare commits
	
		
			60 Commits
		
	
	
		
			wip/is-swi
			...
			wip/xinput
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | eac32fb142 | ||
|   | b93c72315d | ||
|   | f84637d31e | ||
|   | 48a88a33ef | ||
|   | 8847281c31 | ||
|   | d05297593f | ||
|   | a285b8ae44 | ||
|   | e6ba5ec298 | ||
|   | f6d9b29ad0 | ||
|   | e6f0af9abc | ||
|   | d32c726967 | ||
|   | 2c873990d1 | ||
|   | f15993f940 | ||
|   | d482dbcd16 | ||
|   | f5334dd6cf | ||
|   | 972a9d231f | ||
|   | 1dd50cf006 | ||
|   | 855095ad1a | ||
|   | 95b2e6fafc | ||
|   | dfcd079ec2 | ||
|   | e0966e7499 | ||
|   | 38df2715f2 | ||
|   | 5ecbb3ec3b | ||
|   | 656fa71649 | ||
|   | bde0d28f1b | ||
|   | 4cb9a5e3bf | ||
|   | 90c25f0cfe | ||
|   | 2484e8cd64 | ||
|   | 61a7789c83 | ||
|   | c352e1078e | ||
|   | d664579115 | ||
|   | 49dfb40b82 | ||
|   | e08c4756eb | ||
|   | 6378527458 | ||
|   | f0705e142c | ||
|   | 3f7193e558 | ||
|   | 3af9de08ab | ||
|   | 111c23a6e0 | ||
|   | db6ddc4a7f | ||
|   | 884e13474b | ||
|   | 722420df3a | ||
|   | 50cee11c53 | ||
|   | a727114ac2 | ||
|   | 722d2d6472 | ||
|   | 7b9a26fbd8 | ||
|   | 5819e74c22 | ||
|   | 36e237cf1e | ||
|   | 3b0aa9f881 | ||
|   | e6d09c9d0b | ||
|   | e26bf9dcef | ||
|   | 748954a15e | ||
|   | 4c4f21c001 | ||
|   | 166559059a | ||
|   | 7566b4ea17 | ||
|   | 1b7a6ce912 | ||
|   | dc4ecdd0d2 | ||
|   | d381c0465b | ||
|   | 38a0aecf61 | ||
|   | 7573aae855 | ||
|   | 684d40d1a1 | 
							
								
								
									
										29
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -19,9 +19,6 @@ libtool | ||||
| ltmain.sh | ||||
| missing | ||||
| .deps | ||||
| src/50-mutter-navigation.xml | ||||
| src/50-mutter-system.xml | ||||
| src/50-mutter-windows.xml | ||||
| src/mutter-wm.desktop | ||||
| src/mutter.desktop | ||||
| *.o | ||||
| @@ -43,7 +40,6 @@ stamp-h1 | ||||
| stamp-it | ||||
| .intltool-merge-cache | ||||
| POTFILES | ||||
| po/*.pot | ||||
| 50-metacity-desktop-key.xml | ||||
| 50-metacity-key.xml | ||||
| inlinepixbufs.h | ||||
| @@ -51,8 +47,7 @@ libmutter.pc | ||||
| mutter | ||||
| mutter-theme-viewer | ||||
| mutter.desktop | ||||
| org.gnome.mutter.gschema.valid | ||||
| org.gnome.mutter.gschema.xml | ||||
| mutter.schemas | ||||
| testasyncgetprop | ||||
| testboxes | ||||
| testgradient | ||||
| @@ -61,13 +56,10 @@ mutter-mag | ||||
| mutter-message | ||||
| mutter-window-demo | ||||
| focus-window | ||||
| test-attached | ||||
| test-gravity | ||||
| test-resizing | ||||
| test-size-hints | ||||
| # We can't say just "wm-tester" here or it will ignore the directory | ||||
| # rather than the binary | ||||
| src/wm-tester/wm-tester | ||||
| wm-tester | ||||
| INSTALL | ||||
| mkinstalldirs | ||||
| src/mutter-enum-types.[ch] | ||||
| @@ -75,20 +67,3 @@ src/stamp-mutter-enum-types.h | ||||
| src/mutter-marshal.[ch] | ||||
| src/stamp-mutter-marshal.h | ||||
| src/mutter-plugins.pc | ||||
| doc/reference/*.args | ||||
| doc/reference/*.bak | ||||
| doc/reference/*.hierarchy | ||||
| doc/reference/*.interfaces | ||||
| doc/reference/*.prerequisites | ||||
| doc/reference/*.signals | ||||
| doc/reference/*.stamp | ||||
| doc/reference/html/ | ||||
| doc/reference/xml/ | ||||
| doc/reference/meta-decl-list.txt | ||||
| doc/reference/meta-decl.txt | ||||
| doc/reference/meta-overrides.txt | ||||
| doc/reference/meta-undeclared.txt | ||||
| doc/reference/meta-undocumented.txt | ||||
| doc/reference/meta-unused.txt | ||||
| doc/reference/meta-docs.sgml | ||||
| doc/reference/meta.types | ||||
|   | ||||
							
								
								
									
										8
									
								
								HACKING
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								HACKING
									
									
									
									
									
								
							| @@ -42,10 +42,10 @@ Minimal Building/Testing Environment | ||||
|   build a development version of Metacity -- odds are, you may be able | ||||
|   to build metacity from CVS without building any other modules. | ||||
|  | ||||
|   As long as you have gtk+ >= 3.0 and GIO >= 2.25.10 with your distro | ||||
|   (gtk+ >= 2.6 if you manually revert the change from bug 348633), you | ||||
|   should be able to install your distro's development packages | ||||
|   (e.g. gtk2-devel, glib-devel, startup-notification-devel on | ||||
|   As long as you have gtk+ >= 2.10 and GConf with your distro (gtk+ >= | ||||
|   2.6 if you manually revert the change from bug 348633), you should | ||||
|   be able to install your distro's development packages | ||||
|   (e.g. gtk2-devel, GConf2-devel, startup-notification-devel on | ||||
|   Fedora; also, remember to install the gnome-common package which is | ||||
|   needed for building cvs versions of Gnome modules like Metacity) as | ||||
|   well as the standard development tools (gcc, autoconf, automake, | ||||
|   | ||||
| @@ -4,5 +4,3 @@ SUBDIRS=src po doc | ||||
| EXTRA_DIST = HACKING MAINTAINERS rationales.txt | ||||
|  | ||||
| DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache | ||||
|  | ||||
| DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc | ||||
|   | ||||
							
								
								
									
										624
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										624
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,627 +1,3 @@ | ||||
| 3.8.0 | ||||
| ===== | ||||
| * Address major memory leak when changing backgrounds [Ray; #696157] | ||||
|  | ||||
| Contributors: | ||||
|   Ray Strode | ||||
|  | ||||
| Translations: | ||||
|   Sandeep Sheshrao Shedmake [mr], Victor Ibragimov [tg], Gabor Kelemen [hu], | ||||
|   Ville-Pekka Vainio [fi], Rajesh Ranjan [hi], Dr.T.Vasudevan [ta], | ||||
|   ManojKumar Giri [or], Yuri Myasoedov [ru], Petr Kovar [cs], | ||||
|   Jiro Matsuzawa [ja], Krishnababu Krothapalli [te], Ani Peter [ml], | ||||
|   Inaki Larranaga Murgoitio [eu] | ||||
|  | ||||
| 3.7.92 | ||||
| ====== | ||||
| * Build and improve reference docs [Tomeu; #676856, #695641, #695935] | ||||
| * Add tracking of whether there are fullscreen windows [Owen; 649748] | ||||
| * Misc bug fixes and cleanups [Adel, Giovanni, Owen, Jasper, Florian; #695269, | ||||
|   #695711, #694046, #695813, #695881, #676856, #696053, #682779, #696089, | ||||
|   #696091, #696087] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Florian Müllner, Jasper St. Pierre, | ||||
|   Tomeu Vizoso, Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Rafael Ferreira [pt_BR], | ||||
|   Ihar Hrachyshka [be], Nilamdyuti Goswami [as], Matej Urbančič [sl], | ||||
|   Dimitris Spingos [el], Jan Kyselica [sk], Khaled Hosny [ar], | ||||
|   Мирослав Николић [sr, sr@latin], Duarte Loreto [pt], Sweta Kothari [gu], | ||||
|   Milo Casagrande [it], Changwoo Ryu [ko], Gil Forcada [ca], | ||||
|   Carles Ferrando [ca@valencia], Mattias Põldaru [et], Alexandre Franke [fr], | ||||
|   Ask H. Larsen [da], Rūdolfs Mazurs [lv], Nguyễn Thái Ngọc Duy [vi] | ||||
|  | ||||
| 3.7.91 | ||||
| ====== | ||||
| * Fix windows being treated as remote after hostname changes [Ray; #688716] | ||||
| * Add meta_window_get_all_monitors() method [Adel; #646861] | ||||
| * Add grab API for externally defined accelerators [Florian; #643111] | ||||
| * Make session registration an explicit step [Ray; #694876] | ||||
| * Avoid unnecessary stage redraws [Adel; #694988, #695006] | ||||
| * Misc fixes [Giovanni, Ray, Jasper, Rui, Pavel, Owen; #694801, #694725, | ||||
|   #694641, #694393, #678917, #695093, #694837, #695135, #694771, #694321] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Rui Matos, Florian Müllner, | ||||
|   Jasper St. Pierre, Ray Strode, Owen Taylor, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|   Daniel Mustieles [es], Yaron Shahrabani [he], A S Alam [pa], Piotr Drąg [pl], | ||||
|   Gheyret Kenji [ug], Alexandre Franke [fr], Milo Casagrande [it], | ||||
|   Fran Diéguez [gl], Dimitris Spingos [el], Мирослав Николић [sr, sr@latin], | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Nguyễn Thái Ngọc Duy [vi], | ||||
|   Aurimas Černius [lt], Mario Blättermann [de], Kjartan Maraas [nb] | ||||
|  | ||||
| 3.7.90 | ||||
| ====== | ||||
| * Support _NET_WM_OPAQUE_REGION [Jasper, Adel; #679901] | ||||
| * Add wrapper for XI2.3 pointer barriers [Jasper; #677215] | ||||
| * Update style of resize popups [Cosimo; #692741] | ||||
| * Implement compositor <-> application frame synchronization [Owen; #685463] | ||||
| * Handle animated backgrounds [Ray; #682427] | ||||
| * Add a new window group for override-redirect windows [Gayan; #633620] | ||||
| * Pass on pointer events on guard window to Clutter [Jasper; #681540] | ||||
| * Show correct shortcut in window menus [Giovanni; #694045] | ||||
| * Don't put minimized windows at the back of alt-tab [Jasper; #693991] | ||||
| * Misc bug fixes and cleanups [Jasper, Rico, Adel, Florian, Rui, Giovanni, | ||||
|   Owen; #692679, #693354, #690581, #693439, #692718, #693475, #693482, #693540, | ||||
|   #690580, #680990, #693833, #693922, #693854, #694224] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Rui Matos, Florian Müllner, | ||||
|   Gayan Perera, Jasper St. Pierre, Ray Strode, Owen Taylor, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|   Fran Diéguez [gl], A S Alam [pa], Alexandre Franke [fr], Aurimas Černius [lt], | ||||
|   Мирослав Николић [sr, sr@latin], Fran Diéguez [gl], Piotr Drąg [pl], | ||||
|   Luca Ferretti [it], Daniel Mustieles [es] | ||||
|  | ||||
| 3.7.5 | ||||
| ===== | ||||
| * Don't allow multiline window titles [Jon; #683056] | ||||
| * Make meta_window_located_on_workspace() public [Jasper; #691744] | ||||
| * Request XI2.3 [Colin; #692877] | ||||
| * Add meta_window_set_icon_geometry() method [Florian; #692997] | ||||
| * Require XFixes 5.0 [Jasper; #677215] | ||||
| * Change unredirection hints to match spec changes [Adel; #693064] | ||||
| * Improve unredict heuristicts [Adel; #683786] | ||||
| * Misc bug fixes and cleanups [Florian, Jasper, Adel; #691874, #679901, | ||||
|   #692952, #693042] | ||||
|  | ||||
| Contributors: | ||||
|   Adel Gadllah, William Jon McCann, Florian Müllner, Jasper St. Pierre, | ||||
|   Colin Walters | ||||
|  | ||||
| Translations: | ||||
|   Daniel Mustieles [es], Ihar Hrachyshka [be], Nilamdyuti Goswami [as], | ||||
|   Gheyret Kenji [ug], Kjartan Maraas [nb], Yaron Shahrabani [he], | ||||
|   Piotr Drąg [pl], Chao-Hsiung Liao [zh_HK,zh_TW], Milo Casagrande [it] | ||||
|  | ||||
| 3.7.4 | ||||
| ===== | ||||
| * Add support for bypass compositor hints [Adel; #683020] | ||||
| * Make automaximization optional [Adel; #680990] | ||||
| * Add method for checking if the application is responding [Giovanni; #684340] | ||||
| * Expose the xinput opcode [Jasper; #690590] | ||||
| * Rebrand "minimize" as "hide" [Florian; #682887] | ||||
| * Misc bug fixes and cleanups [Giovanni, Ray, Jasper, Matthias, Debarshi, | ||||
|   Florian, Rui; #690454, #690573, #690593, #690956, #691363, #690609, #690317, | ||||
|   #689263] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Matthias Clasen, Adel Gadllah, Rui Matos, Florian Müllner, | ||||
|   Debarshi Ray, Jasper St. Pierre, Ray Strode | ||||
|  | ||||
| Translations: | ||||
|   Mattias Põldaru [et], Yaron Shahrabani [he], Daniel Mustieles [es], | ||||
|   Khaled Hosny [ar], Fran Diéguez [gl], A S Alam [pa], Piotr Drąg [pl], | ||||
|   Rafael Ferreira [pt_BR], Nilamdyuti Goswami [as], Alexander Shopov [bg], | ||||
|   Matej Urbančič [sl] | ||||
|  | ||||
| 3.7.3 | ||||
| ===== | ||||
| * Fix maximized windows jumping to other monitors [Alban; #556696] | ||||
| * Add 'switch-applications' keybinding [Florian; #688913] | ||||
| * Add a convenience method to focus the default window [Jasper; #689652] | ||||
| * Increase typical icon size to 96 [Jasper; #689651] | ||||
| * Port to XInput2 [Jasper; #688779] | ||||
| * Give dynamic keybindings a keybinding action [Florian; #682315] | ||||
| * Misc. fixes and cleanups [Jasper, Rui; #688777] | ||||
|  | ||||
| Contributors: | ||||
|   Alban Crequy, Rui Matos, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Nilamdyuti Goswami [as], Piotr Drąg [pl], Yaron Shahrabani [he], | ||||
|   Dr.T.Vasudevan [ta], ManojKumar Giri [or], Shankar Prasad [kn] | ||||
|  | ||||
| 3.7.2 | ||||
| ===== | ||||
| * Fix spurious focus changes when showing desktop [Florian; #686928] | ||||
| * MetaPluginManager: don't send events to Clutter twice [Owen; #686406] | ||||
| * Add the ability to add shader hooks to MetaBackgroundActor [Giovanni; #669798] | ||||
| * Only process keyboard mapping events for the core X keyboard [Rui; #674859] | ||||
| * Import keybinding files from Metacity [Florian; #687672] | ||||
| * Add compositor hook to process keybindings selectively [Florian; #688202] | ||||
| * MetaBackgroundActor: add a setter for GLSL uniforms [Giovanni; #682536] | ||||
| * Misc. fixes and cleanups [Jasper, Rui, Florian, Rico; #688182] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Rui Matos, Florian Müllner, Jasper St. Pierre, | ||||
|   Owen Taylor, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|   Rafael Ferreira [pt_BR], Tobias Endrigkeit [de], Yaron Shahrabani [he] | ||||
|  | ||||
| 3.7.1 | ||||
| ===== | ||||
| * screen: Ignore num-workspaces when using dynamic workspaces [Florian; #685439] | ||||
|  | ||||
| Contributors: | ||||
|   Florian Müllner | ||||
|  | ||||
| Translations: | ||||
|   Mattias Põldaru [et], Kjartan Maraas [nb], Мирослав Николић [sr, sr@latin], | ||||
|   Marek Černocký [cs], Andika Triwidada [id], Daniel Mustieles [es], | ||||
|   Fran Diéguez [gl], Matej Urbančič [sl] | ||||
|  | ||||
| 3.6.1 | ||||
| ===== | ||||
| * Fix crash when opening large popup menus [Jasper; #681676] | ||||
| * window: Don't move the desktop window after monitor hotplug [Jasper; #681159] | ||||
| * Expose MetaPlugin to introspection [Evan; #671098] | ||||
| * Optionally delay focus changes in focus-follows-mouse mode [Florian; #678169] | ||||
| * Resize the guard window when the X screen is resized [Benjamin; #670396] | ||||
| * display: Only manage the default X screen [Jürg; #648156] | ||||
| * Misc cleanups: [Owen; #587255] | ||||
|  | ||||
| Contributors: | ||||
|   Benjamin Berg, Jürg Billeter, Evan Broder, Florian Müllner, Jasper St. Pierre, | ||||
|   Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|   Alexandre Franke [fr], Theppitak Karoonboonyanan [th], Sayak Sarkar [bn_IN], | ||||
|   Sandeep Sheshrao Shedmake [mr], Ask H. Larsen [da], Shankar Prasad [kn], | ||||
|   Alexander Shopov [bg], Aurimas Černius [lt], Ihar Hrachyshka [be], | ||||
|   Kjartan Maraas [nb], Daniel Mustieles [es], Changwoo Ryu [ko], | ||||
|   Yuri Myasoedov [ru], Tom Tryfonidis [el], Rūdolfs Mazurs [lv], | ||||
|   Chris Leonard [en_GB], Piotr Drąg [pl], Fran Diéguez [gl], Gil Forcada [ca], | ||||
|   Matej Urbančič [sl], Andika Triwidada [id], Carles Ferrando [ca] | ||||
|  | ||||
| 3.6.0 | ||||
| ===== | ||||
|  | ||||
| Translations: | ||||
|   Alexander Shopov [bg], Daniel Korostil [uk], Rajesh Ranjan [hi], | ||||
|   Krishnababu Krothapalli [te], Ani Peter [ml], Rūdolfs Mazurs [lv], | ||||
|   Sweta Kothari [gu], Ihar Hrachyshka [be], Noriko Mizumoto [ja], | ||||
|   Timo Jyrinki [fi], Mattias Põldaru [et] | ||||
|  | ||||
| 3.5.92 | ||||
| ====== | ||||
| * screen: Allow NULL out arguments in meta_screen_get_size [Tomeu] | ||||
| * display: Add API to set wm_name / wm_keybindings [Florian; #671010] | ||||
| * Improve the not responding dialog [Jon, Florian; #684306] | ||||
| * Misc. bugfixes [Jasper] | ||||
|  | ||||
| Contributors: | ||||
|   William Jon McCann, Florian Müllner, Jasper St. Pierre, Tomeu Vizoso | ||||
|  | ||||
| Translations: | ||||
|   Gabor Kelemen [hu], Piotr Drąg [pl], Dr.T.Vasudevan [ta], Bruce Cowan [en_GB], | ||||
|   Alexandre Franke [fr], Theppitak Karoonboonyanan [th], Gil Forcada [ca], | ||||
|   Carles Ferrando [ca@valencia], Tobias Endrigkeit [de], Tom Tryfonidis [el], | ||||
|   Nguyễn Thái Ngọc Duy [vi], Changwoo Ryu [ko], Ask H. Larsen [da], | ||||
|   Rafael Ferreira [pt_BR], Marek Černocký [cs] | ||||
|  | ||||
| 3.5.91 | ||||
| ====== | ||||
| * Do not include markup in app not responding dialog [Alex] | ||||
| * Fix subtracting unredirected windows from visible region [Jasper; #677116] | ||||
| * Minor improvements and bugfixes [Jasper, Florian; #682648, #682993] | ||||
|  | ||||
| Contributors: | ||||
|   Alexander Larsson, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Dirgita [id], Piotr Drąg [pl], A S Alam [pa], Yuri Myasoedov [ru], | ||||
|   Milo Casagrande [it], Nilamdyuti Goswami [as], Tom Tryfonidis [el], | ||||
|   Duarte Loreto [pt], Fran Diéguez [gl], Nguyễn Thái Ngọc Duy [vi], | ||||
|   Aurimas Černius [lt], Daniel Nylander [sv] | ||||
|  | ||||
| 3.5.90 | ||||
| ====== | ||||
| * Fix logic for handling translations of the windows group [Owen; #681221] | ||||
| * Handle painting inside a Clutter clone [Owen; #681953] | ||||
| * Update overlay-key on settings changes [Florian; #681906] | ||||
| * Add keybinding for overlay-key [Florian; #665547] | ||||
| * Minor fixes and improvements [Javier, Florian] | ||||
|  | ||||
| Contributors: | ||||
|   Javier Jardón, Florian Müllner, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|   Sweta Kothari [gu], Muhammet Kara [tr], Khaled Hosny [ar], | ||||
|   Sandeep Sheshrao Shedmake [mr] | ||||
|  | ||||
| 3.5.5 | ||||
| ===== | ||||
| * Fix flickering around windows when using window group [Tom; #681221] | ||||
|  | ||||
| Contributor(s): | ||||
|   Tom Beckmann | ||||
|  | ||||
| Translations: | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Matej Urbančič [sl], Fran Diéguez [gl], | ||||
|   Мирослав Николић [sr, sr@latin], Yaron Shahrabani [he], Kjartan Maraas [nb] | ||||
|  | ||||
| 3.5.4 | ||||
| ===== | ||||
| * Make it possible to reimplement move-to-workspace keybindings from plugins | ||||
|   [Giovanni; #674104] | ||||
| * Add a preference to ignore hide-titlebar-when-maximized hint [Rico; #678947] | ||||
| * window: Also use hide-titlebar-when-maximized when tiled [Florian; #679290] | ||||
| * Center modal dialogs on their parent instead [Florian; #674499] | ||||
| * Reduce amount of markup in translated messages [Matthias; #679660] | ||||
| * Fix focus problem after closing a window with focus-follows-mouse | ||||
|   [Jasper; #675982] | ||||
| * Handle changes of the attach-modal-dialogs preference [Florian; #679904] | ||||
| * Do not restore tiling on unmaximize [Florian; #677565] | ||||
| * Misc. fixes and cleanups [Jasper Adriaanse, Jasper, Debarshi, Pavel; | ||||
|   #679153, 673824] | ||||
|  | ||||
| Contributors: | ||||
|  Jasper Lievisse Adriaanse, Giovanni Campagna, Matthias Clasen, Florian Müllner, | ||||
|  Debarshi Ray, Jasper St. Pierre, Rico Tzschichholz, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|  Alexander Shopov [bg], Kjartan Maraas [nb], Yaron Shahrabani [he], | ||||
|  Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Daniel Mustieles [es] | ||||
|  | ||||
| 3.5.3 | ||||
| ===== | ||||
| * Simplify plugin system [Jasper; #676855] | ||||
| * meta-window-actor: Don't unredirect shaped windows [Jasper; #677657] | ||||
| * screen: Add new public meta_screen_get_current_monitor API [Tim; #642591] | ||||
| * frames: Increase the size of resize corners [Jasper; #677669] | ||||
| * window: Make some window methods public [Jasper; #678126] | ||||
| * Fix crash when running mutter stand-alone [Jasper; #678238] | ||||
| * meta-window-actor: Fix potential crash in shaping code [Jasper; #677977] | ||||
| * Misc. fixes [Jasper, Marc-Antoine, Rico] | ||||
|  | ||||
| Contributors: | ||||
|  Tim L, Marc-Antoine Perennou, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  | ||||
|  Daniel Mustieles [es], Matej Urbančič [sl], Khaled Hosny [ar], | ||||
|  Bruno Brouard [fr], Fran Diéguez [gl] | ||||
|  | ||||
| 3.5.2 | ||||
| ===== | ||||
| * keybindings: Remove 'toggle-recording' binding [Florian; #674376] | ||||
| * Switch to gtk-doc syntax [Jasper; #673752] | ||||
| * shaped-texture: never slice shape mask texture [Robert; #674731] | ||||
| * Make Mutter stop relying on Cogl including a GL header [Neil; #672711] | ||||
| * Make support for "XFree86" Xinerama mandatory [Owen; #674727] | ||||
| * meta_window_move_frame(): fix crash when frame is NULL [Owen; #675254] | ||||
| * Fix memory leaks [Pavel; #672640] | ||||
| * Code cleanups [Jasper; #671104 #674876 #676052] | ||||
| * Look for themes in XDG user data dir [Jasper; #675316] | ||||
| * Remove frame pixel caching [Jasper; #675111] | ||||
| * stack: Ignore keep-on-top property on maximized windows [Florian; #673581] | ||||
| * Misc. fixes [Javier, Jasper, Owen, Rico] | ||||
|  | ||||
| Contributors: | ||||
|  Robert Bragg, Javier Járdon, Florian Müllner, Neil Roberts, Jasper St. Pierre,  | ||||
|  Owen Taylor, Rico Tzschichholz, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|  Praveen Illa [te], Luca Ferretti [it], Daniel Mustieles [es] | ||||
|  | ||||
| 3.4.1 | ||||
| ===== | ||||
| * API change: the meta_display_add_keybinding() function added in 3.4 | ||||
|   wasn't usable from a GNOME Shell extension, so has been changed to take | ||||
|   a GSettings object rather than the name of a schema [Jasper; #673014] | ||||
| * Don't try to auto-maximize not-maximizable windows; this fixes the problem | ||||
|   with the Nautilus desktop window being mis-positioned when enabled | ||||
|   [Owen; #673566] | ||||
| * Fix a crash in the default plugin (not used in GNOME) [Giovanni; #673809] | ||||
| * Make the <Super> key work when set as the mouse button modifier | ||||
|   [Florian; #662476] | ||||
|  | ||||
| Contributors: | ||||
|  Giovanni Campagna, Florian Muellner, Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Khaled Hosny [ar], Jordi Serratosa [ca], Carles Ferrando [ca@valencia], | ||||
|  Christian Kirbach [de], Kristjan Schmidt [eo], Arash Mousavi [fa], | ||||
|  Jiro Matsuzawa [ja], Shankar Prasad [kn], Aurimas Černius [lt], | ||||
|  Yinghua Wang [zh_CN] | ||||
|  | ||||
| 3.4.0 | ||||
| ===== | ||||
| * Fix crash when a full-screen window is opened [Jasper; #672797] | ||||
| * Fix memory leaks [Pavel; #672640] | ||||
|  | ||||
| Contributors: | ||||
|  Jasper St. Pierre, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|  Marek Černocký, Petr Kovar [cz], Bruno Brouard [fr], Sweta Kothari [gu], | ||||
|  Yaron Shahrabani [he], Changwoo Ryu [kr], Enrico Nicoletto [pt_BR], | ||||
|  Yuri Myasoedov [ru], Muhammet Kara [tr], Nguyễn Thái Ngọc Duy [vi] | ||||
|  | ||||
| 3.3.92 | ||||
| ====== | ||||
| * Automaximize large windows on map [Adel; #671677] | ||||
| * When unmaximizing windows, make sure the unminimized size | ||||
|   is signficantly less than the maximized size [Adel; #671677] | ||||
| * Don't offer maximize option for windows larger than the screen | ||||
|   [Jasper; #643606] | ||||
| * Always focus the window immediately underneath without restacking | ||||
|   when closing a window [Jasper; #620744] | ||||
| * Avoid drawing shadows when two windows are tiled together [Rui; #643075] | ||||
| * Remove tooltips for window decorations [Florian; #645101] | ||||
| * Add org.gnome.mutter.dynamic-workspaces GSetting - when this is set | ||||
|   to true, workspace counts are never saved to GSettings, avoiding | ||||
|   pointless disk traffic for GNOME dynamic workspaces [Florian; #671568] | ||||
| * Add ::grab-op-begin, ::grab-op-end signals to MetaDisplay [Jasper; #670658] | ||||
| * Add meta_display_get_ignored_modifier_mask() [Florian; #665215] | ||||
| * Remove pointless wrapper methods on MetaPlugin [Jasper; #671103] | ||||
| * Fix frame drawing with 3.3.x GTK+ releases [Florian; #671796] | ||||
| * Build fixes [Jasper, Rico, Rui] | ||||
| * Misc bug fixes [Damien, Jasper, Lionel, Marius, Owen, Rui; | ||||
|   #661256, #667437, #671601, #671087, #672374] | ||||
|  | ||||
| Contributors: | ||||
|  Stefano Facchini, Adel Gadllah, Lionel Landwerlin, Mariusz Libera, | ||||
|  Rui Matos, Florian Müllner, Jasper St. Pierre, Damien Radtke, Owen Taylor, | ||||
|  Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Alexander Shopov [bg], | ||||
|  David Planella [ca], Carles Ferrando [ca@valencia], Kenneth Nielsen [dk], | ||||
|  Bruce Cowan [en_GB], Daniel Mustieles [es], Mattias Põldaru [et], | ||||
|  Inaki Larranaga Murgoitio [eu], Timo Jyrinki [fi], Fran Diéguez [gl], | ||||
|  Gabor Kelemen [hu], Changwoo Ryu [ko], Anita Reitere [lv], | ||||
|  Kjartan Maraas [nb], Wouter Bolsterlee [nl], A S Alam [pa], Piotr Drąg [pl], | ||||
|  Duarte Loreto [pt], Yuri Myasoedov [ru], Daniel Nylander [se], | ||||
|  Matej Urbančič [sl], Miroslav Nikolić [sr], Tirumurti Vasudevan [ta], | ||||
|  Sasi Bhushan [te], Daniel Korostil [uk], Nguyễn Thái Ngọc Duy [vi], | ||||
|  YunQiang Su [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW] | ||||
|  | ||||
| 3.3.90 | ||||
| ====== | ||||
| * Update for Cogl API changes [Robert] | ||||
| * Bug fixes [Adel, Jasper;  #659643] | ||||
| * Build fixes [Jasper, Owen] | ||||
|  | ||||
| Contributors: | ||||
|  Robert Bragg, Adel Gadllah, Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Ask H. Larsen [dk], Miroslav Nikolić [sr] | ||||
|  | ||||
| 3.3.5 | ||||
| ===== | ||||
| * MetaShapedTexture no longer is a ClutterTexture subclass [Jasper; #660941] | ||||
| * Add meta_shaped_texture_get_image() [Jasper; #660941] | ||||
| * Cleanups [Rui, Jasper; #657639] | ||||
| * Depend on GTK+ 3.3.7 [Rico] | ||||
|  | ||||
| Contributors: | ||||
|  Rui Matos, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  Kjartan Maraas [nb], Chao-Hsiung Liao [zh_HK, zh_TW] | ||||
|  | ||||
| 3.3.4 | ||||
| ===== | ||||
| * Adapt to changes in GtkStateFlags [Owen] | ||||
| * Redo properties for applications menu corresponding to GTK+ changes - | ||||
|   they are now _GTK_* not DBUS_*. [Ryan] | ||||
| * Fix crash on gnome-shell restart when a modal dialog is open [Owen; #668299] | ||||
| * Code cleanup [Florian; #666039] | ||||
|  | ||||
| Contributors: | ||||
|  Ryan Lortie, Florian Müllner, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Alexander Shopov [bg], Fran Diéguez [gl] | ||||
|  | ||||
| 3.3.3 | ||||
| ===== | ||||
| * Add keybindings for tiling to left or right [Florian; #648700] | ||||
| * Support GTK+'s hide-titlebar-when-maximized hint [Florian; #665617] | ||||
| * Load _DBUS_APPLICATION_ID, _DBUS_UNIQUE_NAME, _DBUS_OBJECT_PATH | ||||
|   property [Colin, Ryan; #664851] | ||||
| * Handle changes to workspaces-only-on-primary GSetting [Florian; #664853] | ||||
| * Don't use the Clutter default stage [Jasper; #664028] | ||||
| * Fix compilation with --disable-introspection [Lionel; #661871] | ||||
| * Fix problem where stage could end up mis-sized on startup with | ||||
|   multiple monitors [Lionel] | ||||
| * Misc bug fixes [Adel, Lionel, Jasper; #666015] | ||||
|  | ||||
| Contributors: | ||||
|  Adel Gadllah, Lionel Landwerlin, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|  Daniel Mustieles [es], Yaron Shahrabani [he], Kjartan Maraas [nb], | ||||
|  Matej Urbančič [sk], Muhammet Kara [tr] | ||||
|  | ||||
| 3.3.2 | ||||
| ===== | ||||
|  | ||||
| * Move from GConf to GSettings for preferences [Florian; #635378] | ||||
| * Add meta_display_add_keybinding()/meta_display_remove_keybinding() | ||||
|   to allow creating new keybindings at runtime [Florian; #663428] | ||||
| * Add suport for new _NET_WM_STATE_FOCUSED atom in _NET_WM_STATE | ||||
|   to allow applications to draw unfocused windows differently | ||||
|   [Rui; #661427] | ||||
| * Add meta_window_move_resize_frame() to allow specifying the | ||||
|   size and position of a window via the outside dimensions of the | ||||
|   window frame. | ||||
| * Don't activate window tiling when moving in snap mode | ||||
|   [Rui; #662270] | ||||
| * Remove the ability to resize a window from the inner edge of | ||||
|   the titlebar [Jasper; #660129] | ||||
| * Fix for deprecations in GTK+ [Jasper, Rico; #662574, #662895] | ||||
| * Misc bug fixes [Jasper, Rico, Rui; #662895, #642652, #660941, #662225] | ||||
|  | ||||
| Contributors: | ||||
|  Tim Cuthbertson, Rui Matos, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  Jorge González (es), Kjartan Maraas (nb), Krishnababu Krothapalli (te), Nguyễn Thái Ngọc Duy (vi) | ||||
|  | ||||
| 3.2.1 | ||||
| ===== | ||||
| * Allow keyboard window switching (alt-Tab) during drag-and-drop | ||||
|   [Matthias, #660457] | ||||
| * Don't add invisible resize borders to fullscreen windows | ||||
|   [Jasper, Owen; #659854] | ||||
| * Fix crash when toplevel windows were set to unexpected window types | ||||
|   [Owen; #599988] | ||||
| * Correct problems with windows moving when restarting or switching | ||||
|   window managers [Jasper; #660848] | ||||
| * Fix interaction of tiled windows with multiple monitors | ||||
|   [Rui; #642580, #657519] | ||||
| * Make meta_display_unmanage_screen() public [Jasper; #660848] | ||||
| * Fix problem with turning off window decorations on the fly [Rui; #660773] | ||||
| * Fix spurious assertion failures with themes such as Nodoka [Sandro; #661286] | ||||
| * Misc bug fixes [Adel, Jasper, Rui; #660464, #660854, #662053] | ||||
|  | ||||
| Contributors: | ||||
|  Matthias Clasen, Sandro Mani, Rui Matos, Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Tommi Vainikainen [fi], Miroslav Nikolić [sr, sr@latin], Muhammet Kara [tr] | ||||
|  | ||||
| 3.2.0 | ||||
| ===== | ||||
| * Fix _NET_WM_FRAME_EXTENTS not to include invisible borders [Jasper; #659848] | ||||
| * Fix application-specified window placement (-geometry) for | ||||
|   invisible borders [Jasper; #659848] | ||||
|  | ||||
| Contributors: | ||||
|  Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|  Nilamdyuti Goswami [as], Carles Ferrando [ca@valencia], Petr Kovar [cz], | ||||
|  Mario Blättermann [de], Inaki Larranaga [eu], Gabor Kelemen [hu], | ||||
|  Takayoshi Okano [ja], Changwoo Ryu [ko], Djavan Fagundes [pt_BR] | ||||
|  | ||||
| 3.1.92 | ||||
| ====== | ||||
| * Fix bug with unredirecting full-screen windows on multi-monitor - | ||||
|   notably affected gnome-screensaver [Adel; #657869] | ||||
| * Disable top resizing of attached dialogs [Jasper; #657795] | ||||
| * Code cleanup [Jasper, Rui] | ||||
| * Misc bug fixes [Adel, Florian, Jasper, Rui; | ||||
|   #658069, #659266, #659523, #659477] | ||||
|  | ||||
| Contributors: | ||||
|  Adel Gadllah, Rui Matos, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|  Joan Duran [ca], Joe Hansen [dk], Jiro Matsuzawa [ja], Daniel Korostil [uk] | ||||
|  | ||||
| 3.1.91.1 | ||||
| ======== | ||||
| * Fix problem where certain application updates would get lost [#657071, Owen] | ||||
| * Fix a problem where after resuming from the screensaver, things got | ||||
|   slow [#658228, Jasper, Adel] | ||||
| * When a monitor is plugged or unplugged, keep existing windows on their | ||||
|   current monitor [#645408, Alex] | ||||
| * Remove 'Mutter' title from alerts such as | ||||
|   "The widow '%s' is not responding" [Matthias] | ||||
| * Remove pointless warning: | ||||
|    Received a _NET_WM_MOVERESIZE message for %s; these | ||||
|    messages lack timestamps and therefore suck. | ||||
|   [Rui] | ||||
| * Misc bug fixes [Jasper] | ||||
| * Build fixes [Javier] | ||||
|  | ||||
| Contributors: | ||||
|  Matthias Clasen, Adel Gadllah, Javier Jardón, Alex Larsson, Rui Matos, | ||||
|  Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Ihar Hrachyshka [be], Bruce Cowan [en_FB], Daniel Mustieles [es], | ||||
|  Claude Paroz [fr], Andika Triwidada [id], Luca Ferretti [it], | ||||
|  Rudolfs Mazurs [lt], Piotr Drąg [pl], Duarte Loreto [pt], | ||||
|  Matej Urbančič [sl], Tirumurti Vasudevan [ta], Chao-Hsiung Liao [zh_KH, TW] | ||||
|  | ||||
| 3.1.90.1 | ||||
| ======== | ||||
| * Fix crash when no windows are open [Adel; #657692] | ||||
| * Fix annotations for new strictness in gobject-introspection [Jasper, Owen] | ||||
| * Fix some errors with rounded frame drawing [Jasper; #657661] | ||||
|  | ||||
| Contributors: | ||||
|  Adel Gadllah, Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| 3.1.90 | ||||
| ====== | ||||
| * Extend the draggable portion of window borders outside the visible frame | ||||
|   for easy resizing with thin borders. (New draggable_border_width GConf key | ||||
|   controls the total width of visible and invisible borders.) | ||||
|   [Jasper; #644930] | ||||
| * Draw rounded window corners with antialising [Jasper; #628195] | ||||
| * Unredirect override-redirect fullscreen windows, such as full-screen | ||||
|   3D games to avoid any performance impact [Adel; #597014] | ||||
| * Add :resizable and :above properties to MetaWindow. [Tim; #653858] | ||||
| * Add MUTTER_DISABLE_FALLBACK_COLOR environment variable to allow visualizing | ||||
|   places where a color is missing for gtk:custom() colors [Florian; #656112] | ||||
| * Don't attach modal dialogs to special windows like the desktop; | ||||
|   add meta_window_is_attached_dialog() [Dan, #646761] | ||||
| * Make MetaBackgroundActor public, allow creating multiple instances | ||||
|   (sharing a common texture), and add a :dim-factor property | ||||
|   [Rui, Owen; #656433] | ||||
| * Fix attached dialogs to not be resizable from the top and to be | ||||
|   position correctly [Jasper; #656619] | ||||
| * Misc bug fixes [Jasper, Rui; #656335, #657583] | ||||
|  | ||||
| Contributors: | ||||
|  Tim Cuthbertson, Adel Gadllah, Rui Matos, Florian Müllner, Jasper St. Pierre, | ||||
|  Owen Taylor, Dan Winship | ||||
|  | ||||
| Translations: | ||||
|  Alexander Shopov [bg], Jorge González [es], Fran Dieguez [gl], | ||||
|  Yaron Shahrabani [he], Takeshi Aihana [ja], Aurimas Černius [lt], | ||||
|  Kjartan Maraas [nb], A S Alam [pa], Yuri Kozlov [ru], Daniel Nylander [se], | ||||
|  Theppitak Karoonboonyanan [th], Abduxukur Abdurixit [ug], Aron Xu [zh_CN] | ||||
|  | ||||
| 3.1.4 | ||||
| ===== | ||||
| * Use better, much more subtle shadow definitions [Jakub; #649374] | ||||
| * Add the ability to use named GTK+ colors in theme files as | ||||
|   gtk:custom(name,fallback) [Florian; #648709] | ||||
| * Port from GdkColor to GdkRGBA and from GtkStyle to GtkStyleContext | ||||
|   [Florian; #650586] | ||||
| * Try to fix window bindings using the Super key [Owen; #624869] | ||||
| * Update to using more modern Cogl and Clutter APIs | ||||
|   [Adel, Emmanuele, Neil; #654551 #654729 #654730 #655064] | ||||
| * Fix for srcdir != builddir builds [Thierry; #624910] | ||||
| * Make handling of focus appearance for attached dialogs more robust | ||||
|   [Dan; #647712] | ||||
| * Misc bug fixes | ||||
|   [Dan, Florian, Jasper, Owen, Rui; #642957 #649374 #650661 #654489 #654539] | ||||
|  | ||||
| Contributors: | ||||
|  Emmanuele Bassi, Adel Gadllah, Rui Matos, Florian Müllner, Neil Roberts, | ||||
|  Jasper St. Pierre, Jakub Steiner, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Ihar Hrachyshka [be], Jorge González, Daniel Mustieles [es], | ||||
|  Fran Dieguez [gl], Yaron Shahrabani [he], Takeshi Aihana [ja], | ||||
|  Kjartan Maraas [nb], Rudolfs Mazurs [lv], Matej Urbančič [sl], | ||||
|  Abduxukur Abdurixit [ug], Nguyễn Thái Ngọc Duy [vi] | ||||
|  | ||||
| 3.1.3.1 | ||||
| ======= | ||||
| * Back API version down to "3.0" - the change to Meta-3.1.gir | ||||
|   | ||||
							
								
								
									
										47
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								README
									
									
									
									
									
								
							| @@ -1,10 +1,16 @@ | ||||
| The original codebase named "Metacity" is not a meta-City as in an | ||||
| urban center, but rather Meta-ness as in the state of being | ||||
| meta. i.e. metacity : meta as opacity : opaque. Also it may have | ||||
| something to do with the Meta key on UNIX keyboards. | ||||
| Metacity is not a meta-City as in an urban center, but rather | ||||
| Meta-ness as in the state of being meta. i.e. metacity : meta as | ||||
| opacity : opaque. Also it may have something to do with the Meta key | ||||
| on UNIX keyboards. | ||||
|  | ||||
| Since then, it has been renamed mutter after a rebase on top of | ||||
| clutter as a compositing manager. | ||||
| The first release of Metacity was version 2.3. Metacity has no need for | ||||
| your petty hangups about version numbers. | ||||
|  | ||||
| The stable releases so far are 2.4.x, 2.6.x, 2.8.[01], 2.8.1.x, 2.8.5-, | ||||
| 2.10.x, 2.12.x, 2.14.x, 2.16.x. | ||||
|  | ||||
| Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.x, 2.11.x, 2.13.x, | ||||
| 2.15.x, 2.17.x. | ||||
|  | ||||
| COMPILING MUTTER | ||||
| === | ||||
| @@ -12,7 +18,8 @@ COMPILING MUTTER | ||||
| You need GTK+ 2.2.  For startup notification to work you need | ||||
| libstartup-notification at | ||||
| http://www.freedesktop.org/software/startup-notification/ or on the | ||||
| GNOME ftp site. | ||||
| GNOME ftp site. You also need GConf 1.2 (unless building a funky | ||||
| extra-small embedded metacity with --disable-gconf, see below). | ||||
| You need Clutter 1.0. You need gobject-introspection 0.6.3. | ||||
|  | ||||
| REPORTING BUGS AND SUBMITTING PATCHES | ||||
| @@ -52,24 +59,25 @@ MUTTER FEATURES | ||||
|    and should work with KWin, fvwm2, and other EWMH-compliant WMs.) | ||||
|  | ||||
|  - Has a simple theme system and a couple of extra themes come with it. | ||||
|    Change themes via gsettings: | ||||
|      gsettings set org.gnome.desktop.wm.preferences theme Crux | ||||
|      gsettings set org.gnome.desktop.wm.preferences theme Gorilla | ||||
|      gsettings set org.gnome.desktop.wm.preferences theme Atlanta | ||||
|      gsettings set org.gnome.desktop.wm.preferences theme Bright | ||||
|    Change themes via gconf-editor or gconftool or GNOME themes control | ||||
|    panel: | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/theme Crux | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/theme Gorilla | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/theme Atlanta | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/theme Bright | ||||
|  | ||||
|    See theme-format.txt for docs on the theme format. Use  | ||||
|    metacity-theme-viewer to preview themes. | ||||
|  | ||||
|  - Change number of workspaces via gsettings: | ||||
|      gsettings set org.gnome.desktop.wm.preferences num-workspaces 5 | ||||
|  - Change number of workspaces via gconf-editor or gconftool: | ||||
|      gconftool-2 --type=int --set /apps/metacity/general/num_workspaces 5 | ||||
|  | ||||
|    Can also change workspaces from GNOME 2 pager. | ||||
|  | ||||
|  - Change focus mode: | ||||
|      gsettings set org.gnome.desktop.wm.preferences focus-mode mouse | ||||
|      gsettings set org.gnome.desktop.wm.preferences focus-mode sloppy | ||||
|      gsettings set org.gnome.desktop.wm.preferences focus-mode click | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/focus_mode mouse | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/focus_mode sloppy | ||||
|      gconftool-2 --type=string --set /apps/metacity/general/focus_mode click | ||||
|  | ||||
|  - Global keybinding defaults include:    | ||||
|  | ||||
| @@ -84,9 +92,10 @@ MUTTER FEATURES | ||||
|  | ||||
|    Change keybindings for example: | ||||
|  | ||||
|      gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 '[<Alt>F1]' | ||||
|      unst gconftool-2 --type=string --set /apps/metacity/global_keybindings/switch_to_workspace_1 '<Alt>F1' | ||||
|     | ||||
|    Also try the GNOME keyboard shortcuts control panel. | ||||
|    Also try the GNOME keyboard shortcuts control panel, or | ||||
|    gconf-editor. | ||||
|  | ||||
|  - Window keybindings: | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ test -z "$srcdir" && srcdir=. | ||||
| PKG_NAME="mutter" | ||||
| REQUIRED_AUTOMAKE_VERSION=1.10 | ||||
|  | ||||
| (test -f $srcdir/configure.ac \ | ||||
| (test -f $srcdir/configure.in \ | ||||
|   && test -d $srcdir/src) || { | ||||
|     echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" | ||||
|     echo " top-level metacity directory" | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| AC_PREREQ(2.50) | ||||
| 
 | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [8]) | ||||
| m4_define([mutter_micro_version], [0]) | ||||
| m4_define([mutter_minor_version], [1]) | ||||
| m4_define([mutter_micro_version], [3.1]) | ||||
| 
 | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
| @@ -15,9 +15,9 @@ AC_INIT([mutter], [mutter_version], | ||||
| AC_CONFIG_SRCDIR(src/core/display.c) | ||||
| AC_CONFIG_HEADERS(config.h) | ||||
| 
 | ||||
| AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar]) | ||||
| AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip]) | ||||
| m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],) | ||||
| AM_MAINTAINER_MODE([enable]) | ||||
| AM_MAINTAINER_MODE | ||||
| 
 | ||||
| MUTTER_MAJOR_VERSION=mutter_major_version | ||||
| MUTTER_MINOR_VERSION=mutter_minor_version | ||||
| @@ -61,23 +61,21 @@ AC_CHECK_SIZEOF(__int64) | ||||
| ## byte order | ||||
| AC_C_BIGENDIAN | ||||
| 
 | ||||
| GTK_MIN_VERSION=2.91.7 | ||||
| CANBERRA_GTK=libcanberra-gtk3 | ||||
| CANBERRA_GTK_VERSION=0.26 | ||||
| 
 | ||||
| CLUTTER_PACKAGE=clutter-1.0 | ||||
| MUTTER_PC_MODULES="gtk+-3.0 >= $GTK_MIN_VERSION pango >= 1.2.0 cairo >= 1.10.0" | ||||
| 
 | ||||
| MUTTER_PC_MODULES=" | ||||
|    gtk+-3.0 >= 3.3.7 | ||||
|    gio-2.0 >= 2.25.10 | ||||
|    pango >= 1.2.0 | ||||
|    cairo >= 1.10.0 | ||||
|    gsettings-desktop-schemas >= 3.7.3 | ||||
|    xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0 | ||||
|    $CLUTTER_PACKAGE >= 1.13.5 | ||||
|    cogl-1.0 >= 1.13.3 | ||||
| " | ||||
| AC_ARG_ENABLE(gconf, | ||||
|   AC_HELP_STRING([--disable-gconf], | ||||
|                  [disable gconf usage, for embedded/size-sensitive non-GNOME builds]),, | ||||
|   enable_gconf=yes) | ||||
| 
 | ||||
| GLIB_GSETTINGS | ||||
| if test x$enable_gconf = xyes; then | ||||
|     AC_DEFINE(HAVE_GCONF,1,[Build with gconf support]) | ||||
|     MUTTER_PC_MODULES="$MUTTER_PC_MODULES gconf-2.0 >= 1.2.0" | ||||
| fi | ||||
| 
 | ||||
| AC_ARG_ENABLE(verbose-mode, | ||||
|   AC_HELP_STRING([--disable-verbose-mode], | ||||
| @@ -113,14 +111,17 @@ AC_ARG_ENABLE(shape, | ||||
|                  [disable mutter's use of the shaped window extension]),, | ||||
|   enable_shape=auto) | ||||
| 
 | ||||
| ## try definining HAVE_BACKTRACE | ||||
| AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)]) | ||||
| 
 | ||||
| AM_GLIB_GNU_GETTEXT | ||||
| 
 | ||||
| ## here we get the flags we'll actually use | ||||
| # GRegex requires Glib-2.14.0 | ||||
| PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0) | ||||
| # gtk_window_set_icon_name requires gtk2+-2.6.0 | ||||
| PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0) | ||||
| PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0) | ||||
| PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0 >= $GTK_MIN_VERSION) | ||||
| PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0 >= $GTK_MIN_VERSION) | ||||
| 
 | ||||
| # Unconditionally use this dir to avoid a circular dep with gnomecc | ||||
| GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings" | ||||
| @@ -170,6 +171,44 @@ else | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| XCOMPOSITE_VERSION=0.2 | ||||
| 
 | ||||
| AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION]) | ||||
| if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage" | ||||
|   AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, 1, [Building with compositing manager support]) | ||||
|   echo "Building with compositing manager" | ||||
| 
 | ||||
|   ## force on render also | ||||
|   have_xrender=yes | ||||
| else | ||||
|   AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.]) | ||||
| fi | ||||
| 
 | ||||
| CLUTTER_VERSION=1.2.0 | ||||
| CLUTTER_PACKAGE=clutter-1.0 | ||||
| AC_SUBST(CLUTTER_PACKAGE) | ||||
| if $PKG_CONFIG --atleast-version $CLUTTER_VERSION $CLUTTER_PACKAGE ; then | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES $CLUTTER_PACKAGE " | ||||
|   PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE) | ||||
|   AC_DEFINE(WITH_CLUTTER, , [Building with Clutter compositor]) | ||||
| 
 | ||||
|   dnl Check for the clutter-glx-texture-pixmap header | ||||
|   mutter_save_cppflags="$CPPFLAGS" | ||||
|   CPPFLAGS="$CPPFLAGS $CLUTTER_CFLAGS" | ||||
|   AC_CHECK_HEADER([clutter/glx/clutter-glx-texture-pixmap.h], | ||||
|                   [have_glx_texture_pixmap=yes], | ||||
|                   [have_glx_texture_pixmap=no]) | ||||
|   CPPFLAGS="$mutter_save_cppflags" | ||||
| 
 | ||||
|   if test x$have_glx_texture_pixmap = xyes; then | ||||
|     AC_DEFINE(HAVE_GLX_TEXTURE_PIXMAP, , | ||||
|               [Is ClutterGLXTexturePixmap available?]) | ||||
|   fi | ||||
| else | ||||
|   AC_MSG_ERROR([no. Mutter requires Clutter version $CLUTTER_VERSION.]) | ||||
| fi | ||||
| 
 | ||||
| INTROSPECTION_VERSION=0.9.5 | ||||
| GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION]) | ||||
| 
 | ||||
| @@ -199,44 +238,93 @@ if test x$have_xcursor = xyes; then | ||||
|   AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support]) | ||||
| fi | ||||
| 
 | ||||
| XINPUT2_VERSION=1.4.0 | ||||
| 
 | ||||
| AC_ARG_ENABLE(xinput2, | ||||
|   AC_HELP_STRING([--disable-xinput2], | ||||
|                  [disable XInput2 usage]),, | ||||
|   enable_xinput2=yes) | ||||
| 
 | ||||
| if test x$enable_xinput2 = xyes; then | ||||
|   AC_MSG_CHECKING([XInput2]) | ||||
|   if $PKG_CONFIG --atleast-version $XINPUT2_VERSION xi; then | ||||
|     have_xinput2=yes | ||||
|   else | ||||
|     have_xinput2=no | ||||
|   fi | ||||
|   AC_MSG_RESULT($have_xinput2) | ||||
| else | ||||
|   have_xinput2=no | ||||
| fi | ||||
| 
 | ||||
| if test x$have_xinput2 = xyes; then | ||||
|   echo "Building with XInput2" | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES xi" | ||||
|   AC_DEFINE(HAVE_XINPUT2, , [Building with XInput2 support]) | ||||
| fi | ||||
| 
 | ||||
| AM_CONDITIONAL(HAVE_XINPUT2, test "$have_xinput2" = "yes") | ||||
| 
 | ||||
| PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) | ||||
| 
 | ||||
| PKG_CHECK_EXISTS([xi >= 1.6.99.1], | ||||
|                  AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater])) | ||||
| 
 | ||||
| # This is used for plugins | ||||
| AC_SUBST(CLUTTER_PACKAGE) | ||||
| PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE) | ||||
| 
 | ||||
| AC_PATH_XTRA | ||||
| 
 | ||||
| ALL_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" | ||||
| 
 | ||||
| # Check for Xinerama extension - we only support the "XFree86" style, | ||||
| # and not the older Solaris-only version; recent Solaris supports the | ||||
| # XFree86 style. | ||||
| # Check for Xinerama extension (Solaris impl or Xfree impl) | ||||
| mutter_save_cppflags="$CPPFLAGS" | ||||
| CPPFLAGS="$CPPFLAGS $X_CFLAGS" | ||||
| 
 | ||||
| have_xinerama=yes | ||||
| AC_CHECK_LIB(Xinerama, XineramaQueryExtension, | ||||
|     [AC_CHECK_HEADER(X11/extensions/Xinerama.h, | ||||
| 		     [X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS" | ||||
| 		     if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then | ||||
| 			 X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" | ||||
| 		     fi], | ||||
| 		     have_xinerama=no, | ||||
| 		     [#include <X11/Xlib.h>])], | ||||
|     have_xinerama=no, -lXext $ALL_X_LIBS) | ||||
| AC_MSG_CHECKING(for Xinerama support) | ||||
| AC_MSG_RESULT($have_xinerama) | ||||
| AC_ARG_ENABLE(xinerama, | ||||
|   AC_HELP_STRING([--disable-xinerama], | ||||
|                  [disable mutter's use of the Xinerama extension]), | ||||
|   try_xinerama=$enable_xinerama,try_xinerama=yes) | ||||
| 
 | ||||
| use_solaris_xinerama=no | ||||
| use_xfree_xinerama=no | ||||
| if test "${try_xinerama}" != no; then | ||||
|     case "$host" in | ||||
|         *-*-solaris*) | ||||
|             # Check for solaris | ||||
|             use_solaris_xinerama=yes | ||||
|             AC_CHECK_LIB(Xext, XineramaGetInfo, | ||||
|                          use_solaris_xinerama=yes, use_solaris_xinerama=no, | ||||
|                          $ALL_X_LIBS) | ||||
|             if test "x$use_solaris_xinerama" = "xyes"; then | ||||
|                 AC_CHECK_HEADER(X11/extensions/xinerama.h, | ||||
|                                 if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then | ||||
|                                     X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" | ||||
|                                 fi | ||||
|                                 AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama]) | ||||
|                                 AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]), | ||||
|                                 use_solaris_xinerama=no, | ||||
|                                 [#include <X11/Xlib.h>]) | ||||
|             fi | ||||
|             AC_MSG_CHECKING(for Xinerama support on Solaris) | ||||
|             AC_MSG_RESULT($use_solaris_xinerama); | ||||
|             ;; | ||||
|         *) | ||||
|             # Check for XFree | ||||
|             use_xfree_xinerama=yes | ||||
|             AC_CHECK_LIB(Xinerama, XineramaQueryExtension, | ||||
|                 [AC_CHECK_HEADER(X11/extensions/Xinerama.h, | ||||
|                                  X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS" | ||||
|                                  if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then | ||||
|                                      X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" | ||||
|                                  fi | ||||
|                                  AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama]) | ||||
|                                  AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]), | ||||
|                                  use_xfree_xinerama=no, | ||||
|                                  [#include <X11/Xlib.h>])], | ||||
|                 use_xfree_xinerama=no, -lXext $ALL_X_LIBS) | ||||
|             AC_MSG_CHECKING(for Xinerama support on XFree86) | ||||
|             AC_MSG_RESULT($use_xfree_xinerama); | ||||
|             ;; | ||||
|     esac | ||||
| fi | ||||
| 
 | ||||
| CPPFLAGS="$mutter_save_cppflags" | ||||
| 
 | ||||
| if test x$have_xinerama = xno; then | ||||
|    AC_MSG_ERROR([Xinerama extension was not found]) | ||||
| fi | ||||
| 
 | ||||
| SHAPE_LIBS= | ||||
| found_shape=no | ||||
| AC_CHECK_LIB(Xext, XShapeQueryExtension, | ||||
| @@ -352,6 +440,18 @@ fi | ||||
| 
 | ||||
| AC_SUBST(GDK_PIXBUF_CSOURCE) | ||||
| 
 | ||||
| if test x$enable_gconf = xyes; then | ||||
|    AC_PATH_PROG(GCONFTOOL, gconftool-2, no) | ||||
|    if test x"$GCONFTOOL" = xno; then | ||||
|      AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf]) | ||||
|    fi | ||||
| 
 | ||||
|    AM_GCONF_SOURCE_2 | ||||
| else | ||||
|   GCONF_SCHEMAS_INSTALL_TRUE='#' | ||||
|   GCONF_SCHEMAS_INSTALL_FALSE= | ||||
| fi | ||||
| 
 | ||||
| AC_PATH_PROG(ZENITY, zenity, no) | ||||
| if test x"$ZENITY" = xno; then | ||||
|   AC_MSG_ERROR([zenity not found in your path - needed for dialogs]) | ||||
| @@ -364,7 +464,11 @@ if test "x$enable_debug" = "xyes"; then | ||||
| 	CFLAGS="$CFLAGS -g -O" | ||||
| fi | ||||
| 
 | ||||
| GTK_DOC_CHECK([1.15], [--flavour no-tmpl]) | ||||
| # For fix-meta-rectangle.py | ||||
| AM_PATH_PYTHON([2.5]) | ||||
| 
 | ||||
| # Use gnome-doc-utils: | ||||
| GNOME_DOC_INIT([0.8.0]) | ||||
| 
 | ||||
| #### Warnings (last since -Werror can disturb other tests) | ||||
| 
 | ||||
| @@ -425,7 +529,7 @@ if test "$enable_compile_warnings" != no ; then | ||||
|     if test "$enable_compile_warnings" = error; then | ||||
|       case " $CFLAGS " in | ||||
|       *[\ \	]-Werror[\ \	]*) ;; | ||||
|       *) CFLAGS="$CFLAGS -Werror -Wno-error=deprecated-declarations" ;; | ||||
|       *) CFLAGS="$CFLAGS -Werror" ;; | ||||
|       esac | ||||
|     fi | ||||
|   fi | ||||
| @@ -436,8 +540,6 @@ AC_CONFIG_FILES([ | ||||
| Makefile | ||||
| doc/Makefile | ||||
| doc/man/Makefile | ||||
| doc/reference/Makefile | ||||
| doc/reference/meta-docs.sgml | ||||
| src/Makefile | ||||
| src/wm-tester/Makefile | ||||
| src/libmutter.pc | ||||
| @@ -449,6 +551,13 @@ po/Makefile.in | ||||
| 
 | ||||
| AC_OUTPUT | ||||
| 
 | ||||
| if test x$enable_gconf = xno; then | ||||
|         echo "*** WARNING WARNING WARNING WARNING WARNING" | ||||
|         echo "*** Building without GConf.  This means there's no" | ||||
|         echo "*** way to change prefs except hacking source code." | ||||
|         echo "*** This is intended for embedded systems etc., not for normal use." | ||||
| fi | ||||
| 
 | ||||
| if test x$enable_verbose_mode = xno; then | ||||
|         echo "*** WARNING WARNING WARNING WARNING WARNING" | ||||
|         echo "*** Building without verbose mode" | ||||
| @@ -465,6 +574,9 @@ mutter-$VERSION | ||||
| 	source code location:	  ${srcdir} | ||||
| 	compiler:		  ${CC} | ||||
| 
 | ||||
| 	GConf:                    ${enable_gconf} | ||||
| 	XFree86 Xinerama:         ${use_xfree_xinerama} | ||||
| 	Solaris Xinerama:         ${use_solaris_xinerama} | ||||
| 	Startup notification:     ${have_startup_notification} | ||||
| 	libcanberra:              ${have_libcanberra} | ||||
| 	Introspection:            ${found_introspection} | ||||
| @@ -472,6 +584,7 @@ mutter-$VERSION | ||||
| 	Shape extension:          ${found_shape} | ||||
| 	Xsync:                    ${found_xsync} | ||||
| 	Xcursor:                  ${have_xcursor} | ||||
| 	XInput2:                  ${have_xinput2} | ||||
| " | ||||
| 
 | ||||
| 
 | ||||
| @@ -479,8 +592,8 @@ MUTTER_MINOR_VERSION=mutter_minor_version | ||||
| if expr $MUTTER_MINOR_VERSION % 2 > /dev/null ; then | ||||
|    stable_version=`expr $MUTTER_MINOR_VERSION - 1` | ||||
|    echo "This is the UNSTABLE branch of mutter" | ||||
|    echo -n "Use 3.$stable_version.x for stable " | ||||
|    echo    "(gnome-3-$stable_version branch in git)" | ||||
|    echo -n "Use 2.$stable_version.x for stable " | ||||
|    echo    "(gnome-2-$stable_version branch in git)" | ||||
| else | ||||
|    echo "This is the stable branch of mutter" | ||||
| fi | ||||
| @@ -1,4 +1,4 @@ | ||||
| SUBDIRS = man reference | ||||
| SUBDIRS = man | ||||
|  | ||||
| EXTRA_DIST=theme-format.txt dialogs.txt code-overview.txt \ | ||||
| 	how-to-get-focus-right.txt | ||||
|   | ||||
| @@ -31,7 +31,8 @@ workspaces.  In these cases, there needs to be a rule consistent with | ||||
| the above about the new window to choose. | ||||
|  | ||||
| Focus method  Behavior | ||||
|     click     Focus the window on top | ||||
|     click     Focus the most recently used window (same as the window | ||||
|               on top) | ||||
|    sloppy     Focus the window containing the pointer if there is such | ||||
|               a window, otherwise focus the most recently used window. | ||||
|     mouse     Focus the non-DESKTOP window containing the pointer if | ||||
|   | ||||
| @@ -46,13 +46,13 @@ because the original program does not have a manual page. | ||||
| Restart \fBmutter\fP(1) which is running. | ||||
| .TP | ||||
| .B reload-theme | ||||
| Reload a theme which is specified on gsettings database. | ||||
| Reload a theme which is specified on gconf database. | ||||
| .TP | ||||
| .B enable-keybindings | ||||
| Enable all of keybindings which is specified on gsettings database. | ||||
| Enable all of keybindings which is specified on gconf database. | ||||
| .TP | ||||
| .B disable-keybindings | ||||
| Disable all of keybindings which is specified on gsettings database. | ||||
| Disable all of keybindings which is specified on gconf database. | ||||
| .SH SEE ALSO | ||||
| .BR mutter (1) | ||||
| .SH AUTHOR | ||||
|   | ||||
| @@ -51,7 +51,7 @@ Print the version number. | ||||
| .B \-?, \-\-help | ||||
| Show summary of options. | ||||
| .SH CONFIGURATION | ||||
| \fBmutter\fP configuration can be found under \fIPreferences\fP->\fIWindows\fP and \fIPreferences\fP->\fIKeyboard Shortcuts\fP on the menu-panel. Advanced configuration can be achieved directly through gsettings. | ||||
| \fBmutter\fP configuration can be found under \fIPreferences\fP->\fIWindows\fP and \fIPreferences\fP->\fIKeyboard Shortcuts\fP on the menu-panel. Advanced configuration can be achieved directly through gconf editing (gconf-editor or gconftool-2). | ||||
| .SH SEE ALSO | ||||
| .BR mutter-message (1) | ||||
| .SH AUTHOR | ||||
|   | ||||
| @@ -1,166 +0,0 @@ | ||||
| ## Process this file with automake to produce Makefile.in | ||||
|  | ||||
| # We require automake 1.6 at least. | ||||
| AUTOMAKE_OPTIONS = 1.6 | ||||
|  | ||||
| # This is a blank Makefile.am for using gtk-doc. | ||||
| # Copy this to your project's API docs directory and modify the variables to | ||||
| # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples | ||||
| # of using the various options. | ||||
|  | ||||
| # The name of the module, e.g. 'glib'. | ||||
| DOC_MODULE=meta | ||||
|  | ||||
| # Uncomment for versioned docs and specify the version of the module, e.g. '2'. | ||||
| #DOC_MODULE_VERSION=2 | ||||
|  | ||||
|  | ||||
| # The top-level SGML file. You can change this if you want to. | ||||
| DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml | ||||
|  | ||||
| # Directories containing the source code, relative to $(srcdir). | ||||
| # gtk-doc will search all .c and .h files beneath these paths | ||||
| # for inline comments documenting functions and macros. | ||||
| # e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk | ||||
| DOC_SOURCE_DIR=../../src/ | ||||
|  | ||||
| # Extra options to pass to gtkdoc-scangobj. Not normally needed. | ||||
| SCANGOBJ_OPTIONS= | ||||
|  | ||||
| # Extra options to supply to gtkdoc-scan. | ||||
| # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" | ||||
| SCAN_OPTIONS=--rebuild-types | ||||
|  | ||||
| # Extra options to supply to gtkdoc-mkdb. | ||||
| # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml | ||||
| MKDB_OPTIONS=--xml-mode --output-format=xml | ||||
|  | ||||
| # Extra options to supply to gtkdoc-mktmpl | ||||
| # e.g. MKTMPL_OPTIONS=--only-section-tmpl | ||||
| MKTMPL_OPTIONS= | ||||
|  | ||||
| # Extra options to supply to gtkdoc-mkhtml | ||||
| MKHTML_OPTIONS= | ||||
|  | ||||
| # Extra options to supply to gtkdoc-fixref. Not normally needed. | ||||
| # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html | ||||
| FIXXREF_OPTIONS= | ||||
|  | ||||
| # Used for dependencies. The docs will be rebuilt if any of these change. | ||||
| # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h | ||||
| # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c | ||||
| HFILE_GLOB=$(top_srcdir)/src/*.h | ||||
| CFILE_GLOB=$(top_srcdir)/src/*.c | ||||
|  | ||||
| # Extra header to include when scanning, which are not under DOC_SOURCE_DIR | ||||
| # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h | ||||
| EXTRA_HFILES= | ||||
|  | ||||
| # Header files or dirs to ignore when scanning. Use base file/dir names | ||||
| # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code | ||||
| IGNORE_HFILES= \ | ||||
| 	async-getprop.h \ | ||||
| 	atoms.h \ | ||||
| 	bell.h \ | ||||
| 	boxes-private.h \ | ||||
| 	clutter-utils.h \ | ||||
| 	cogl-utils.h \ | ||||
| 	compositor-private.h \ | ||||
| 	constraints.h \ | ||||
| 	core.h \ | ||||
| 	display-private.h \ | ||||
| 	draw-workspace.h \ | ||||
| 	edge-resistance.h \ | ||||
| 	eventqueue.h \ | ||||
| 	frame.h \ | ||||
| 	frames.h \ | ||||
| 	group-private.h \ | ||||
| 	group-props.h \ | ||||
| 	iconcache.h \ | ||||
| 	inlinepixbufs.h \ | ||||
| 	keybindings-private.h \ | ||||
| 	menu.h \ | ||||
| 	metaaccellabel.h \ | ||||
| 	meta-background-actor-private.h \ | ||||
| 	meta-background-group-private.h \ | ||||
| 	meta-module.h \ | ||||
| 	meta-plugin-manager.h \ | ||||
| 	meta-shadow-factory-private.h \ | ||||
| 	meta-texture-rectangle.h \ | ||||
| 	meta-texture-tower.h \ | ||||
| 	meta-window-actor-private.h \ | ||||
| 	meta-window-group.h \ | ||||
| 	meta-window-shape.h \ | ||||
| 	mutter-enum-types.h \ | ||||
| 	mutter-Xatomtype.h \ | ||||
| 	place.h \ | ||||
| 	preview-widget.h \ | ||||
| 	region-utils.h \ | ||||
| 	resizepopup.h \ | ||||
| 	screen-private.h \ | ||||
| 	session.h \ | ||||
| 	stack.h \ | ||||
| 	stack-tracker.h \ | ||||
| 	stamp-mutter-enum-types.h \ | ||||
| 	tabpopup.h \ | ||||
| 	theme.h \ | ||||
| 	theme-private.h \ | ||||
| 	tile-preview.h \ | ||||
| 	ui.h \ | ||||
| 	window-private.h \ | ||||
| 	window-props.h \ | ||||
| 	workspace-private.h \ | ||||
| 	xprops.h \ | ||||
| 	$(NULL) | ||||
|  | ||||
| MKDB_OPTIONS+=--ignore-files="$(IGNORE_HFILES)" | ||||
|  | ||||
| # Images to copy into HTML directory. | ||||
| # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png | ||||
| HTML_IMAGES= | ||||
|  | ||||
| # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). | ||||
| # e.g. content_files=running.sgml building.sgml changes-2.0.sgml | ||||
| content_files= \ | ||||
| 	mutter-overview.xml \ | ||||
| 	running-mutter.xml \ | ||||
| 	$(NULL) | ||||
|  | ||||
| # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded | ||||
| # These files must be listed here *and* in content_files | ||||
| # e.g. expand_content_files=running.sgml | ||||
| expand_content_files= \ | ||||
| 	mutter-overview.xml \ | ||||
| 	running-mutter.xml \ | ||||
| 	$(NULL) | ||||
|  | ||||
| # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. | ||||
| # Only needed if you are using gtkdoc-scangobj to dynamically query widget | ||||
| # signals and properties. | ||||
| # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) | ||||
| # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) | ||||
| GTKDOC_CFLAGS=$(MUTTER_CFLAGS) | ||||
| GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter.la | ||||
|  | ||||
| # This includes the standard gtk-doc make rules, copied by gtkdocize. | ||||
| include $(top_srcdir)/gtk-doc.make | ||||
|  | ||||
| # Other files to distribute | ||||
| # e.g. EXTRA_DIST += version.xml.in | ||||
| EXTRA_DIST += | ||||
|  | ||||
| # Files not to distribute | ||||
| # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types | ||||
| # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt | ||||
| DISTCLEANFILES = $(DOC_MODULES).types | ||||
|  | ||||
| # Comment this out if you want 'make check' to test you doc status | ||||
| # and run some sanity checks | ||||
| if ENABLE_GTK_DOC | ||||
| TESTS_ENVIRONMENT = cd $(srcdir) && \ | ||||
|   DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ | ||||
|   SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) | ||||
| #TESTS = $(GTKDOC_CHECK) | ||||
| endif | ||||
|  | ||||
| -include $(top_srcdir)/git.mk | ||||
| @@ -1,59 +0,0 @@ | ||||
| <?xml version="1.0"?> | ||||
| <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" | ||||
|                "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" | ||||
| [ | ||||
|   <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'"> | ||||
|   <!ENTITY version "@VERSION@"> | ||||
| ]> | ||||
| <book id="index"> | ||||
|   <bookinfo> | ||||
|     <title>Mutter Reference Manual</title> | ||||
|     <releaseinfo> | ||||
|       This document is for Mutter &version;. | ||||
|       The latest version of this documentation can be found on-line at | ||||
|       <ulink role="online-location" url="http://developer.gnome.org/meta/">http://developer.gnome.org/meta/</ulink>. | ||||
|     </releaseinfo> | ||||
|   </bookinfo> | ||||
|  | ||||
|   <xi:include href="xml/mutter-overview.xml"/> | ||||
|   <xi:include href="xml/running-mutter.xml"/> | ||||
|  | ||||
|   <part id="core-reference"> | ||||
|     <title>Mutter Core Reference</title> | ||||
|     <xi:include href="xml/main.xml"/> | ||||
|     <xi:include href="xml/common.xml"/> | ||||
|     <xi:include href="xml/gradient.xml"/> | ||||
|     <xi:include href="xml/prefs.xml"/> | ||||
|     <xi:include href="xml/util.xml"/> | ||||
|     <xi:include href="xml/errors.xml"/> | ||||
|     <xi:include href="xml/meta-plugin.xml"/> | ||||
|     <xi:include href="xml/barrier.xml"/> | ||||
|     <xi:include href="xml/boxes.xml"/> | ||||
|     <xi:include href="xml/compositor.xml"/> | ||||
|     <xi:include href="xml/display.xml"/> | ||||
|     <xi:include href="xml/group.xml"/> | ||||
|     <xi:include href="xml/keybindings.xml"/> | ||||
|     <xi:include href="xml/meta-background-actor.xml"/> | ||||
|     <xi:include href="xml/meta-shadow-factory.xml"/> | ||||
|     <xi:include href="xml/meta-shaped-texture.xml"/> | ||||
|     <xi:include href="xml/meta-window-actor.xml"/> | ||||
|     <xi:include href="xml/screen.xml"/> | ||||
|     <xi:include href="xml/window.xml"/> | ||||
|     <xi:include href="xml/workspace.xml"/> | ||||
|   </part> | ||||
|  | ||||
|   <chapter id="object-tree"> | ||||
|     <title>Object Hierarchy</title> | ||||
|      <xi:include href="xml/tree_index.sgml"/> | ||||
|   </chapter> | ||||
|   <index id="api-index-full"> | ||||
|     <title>API Index</title> | ||||
|     <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include> | ||||
|   </index> | ||||
|   <index id="deprecated-api-index" role="deprecated"> | ||||
|     <title>Index of deprecated API</title> | ||||
|     <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include> | ||||
|   </index> | ||||
|  | ||||
|   <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include> | ||||
| </book> | ||||
| @@ -1,667 +0,0 @@ | ||||
| <SECTION> | ||||
| <FILE>barrier</FILE> | ||||
| <TITLE>MetaBarrier</TITLE> | ||||
| MetaBarrier | ||||
| MetaBarrierClass | ||||
| meta_barrier_is_active | ||||
| meta_barrier_destroy | ||||
| meta_barrier_release | ||||
| MetaBarrierDirection | ||||
| MetaBarrierEvent | ||||
| <SUBSECTION Standard> | ||||
| META_BARRIER | ||||
| META_BARRIER_CLASS | ||||
| META_BARRIER_GET_CLASS | ||||
| META_IS_BARRIER | ||||
| META_IS_BARRIER_CLASS | ||||
| META_TYPE_BARRIER | ||||
| META_TYPE_BARRIER_EVENT | ||||
| MetaBarrierPrivate | ||||
| meta_barrier_event_get_type | ||||
| meta_barrier_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>boxes</FILE> | ||||
| MetaRectangle | ||||
| MetaStrut | ||||
| MetaEdgeType | ||||
| MetaEdge | ||||
| meta_rectangle_copy | ||||
| meta_rectangle_free | ||||
| meta_rect | ||||
| meta_rectangle_area | ||||
| meta_rectangle_intersect | ||||
| meta_rectangle_equal | ||||
| meta_rectangle_union | ||||
| meta_rectangle_overlap | ||||
| meta_rectangle_vert_overlap | ||||
| meta_rectangle_horiz_overlap | ||||
| meta_rectangle_could_fit_rect | ||||
| meta_rectangle_contains_rect | ||||
| <SUBSECTION Standard> | ||||
| META_TYPE_RECTANGLE | ||||
| meta_rectangle_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>common</FILE> | ||||
| META_VIRTUAL_CORE_POINTER_ID | ||||
| META_VIRTUAL_CORE_KEYBOARD_ID | ||||
| MetaFrameFlags | ||||
| MetaMenuOp | ||||
| MetaWindowMenuFunc | ||||
| MetaGrabOp | ||||
| MetaCursor | ||||
| MetaFrameType | ||||
| MetaVirtualModifier | ||||
| MetaDirection | ||||
| MetaMotionDirection | ||||
| MetaSide | ||||
| MetaButtonFunction | ||||
| MAX_BUTTONS_PER_CORNER | ||||
| MetaButtonLayout | ||||
| MetaFrameBorders | ||||
| meta_frame_borders_clear | ||||
| META_ICON_WIDTH | ||||
| META_ICON_HEIGHT | ||||
| META_MINI_ICON_WIDTH | ||||
| META_MINI_ICON_HEIGHT | ||||
| META_DEFAULT_ICON_NAME | ||||
| META_PRIORITY_RESIZE | ||||
| META_PRIORITY_BEFORE_REDRAW | ||||
| META_PRIORITY_REDRAW | ||||
| META_PRIORITY_PREFS_NOTIFY | ||||
| POINT_IN_RECT | ||||
| MetaStackLayer | ||||
| MetaWindowMenu | ||||
| MetaResizePopup | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>compositor</FILE> | ||||
| MetaCompEffect | ||||
| MetaCompositor | ||||
| meta_compositor_new | ||||
| meta_compositor_destroy | ||||
| meta_compositor_manage_screen | ||||
| meta_compositor_unmanage_screen | ||||
| meta_compositor_window_shape_changed | ||||
| meta_compositor_process_event | ||||
| meta_compositor_filter_keybinding | ||||
| meta_compositor_add_window | ||||
| meta_compositor_remove_window | ||||
| meta_compositor_show_window | ||||
| meta_compositor_hide_window | ||||
| meta_compositor_switch_workspace | ||||
| meta_compositor_maximize_window | ||||
| meta_compositor_unmaximize_window | ||||
| meta_compositor_window_mapped | ||||
| meta_compositor_window_unmapped | ||||
| meta_compositor_sync_window_geometry | ||||
| meta_compositor_set_updates_frozen | ||||
| meta_compositor_queue_frame_drawn | ||||
| meta_compositor_sync_stack | ||||
| meta_compositor_sync_screen_size | ||||
| meta_compositor_flash_screen | ||||
| meta_get_stage_for_screen | ||||
| meta_get_overlay_group_for_screen | ||||
| meta_get_overlay_window | ||||
| meta_get_window_actors | ||||
| meta_get_window_group_for_screen | ||||
| meta_get_top_window_group_for_screen | ||||
| meta_disable_unredirect_for_screen | ||||
| meta_enable_unredirect_for_screen | ||||
| meta_set_stage_input_region | ||||
| meta_empty_stage_input_region | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>display</FILE> | ||||
| MetaTabList | ||||
| MetaTabShowType | ||||
| meta_XFree | ||||
| meta_display_get_compositor_version | ||||
| meta_display_get_xinput_opcode | ||||
| meta_display_supports_extended_barriers | ||||
| meta_display_get_xdisplay | ||||
| meta_display_get_compositor | ||||
| meta_display_get_screens | ||||
| meta_display_has_shape | ||||
| meta_display_screen_for_root | ||||
| meta_display_get_focus_window | ||||
| meta_display_xwindow_is_a_no_focus_window | ||||
| meta_display_get_damage_event_base | ||||
| meta_display_get_shape_event_base | ||||
| meta_display_xserver_time_is_before | ||||
| meta_display_get_last_user_time | ||||
| meta_display_get_current_time | ||||
| meta_display_get_current_time_roundtrip | ||||
| meta_display_get_ignored_modifier_mask | ||||
| meta_display_get_tab_list | ||||
| meta_display_get_tab_next | ||||
| meta_display_get_tab_current | ||||
| meta_display_begin_grab_op | ||||
| meta_display_end_grab_op | ||||
| meta_display_get_grab_op | ||||
| meta_display_add_keybinding | ||||
| meta_display_remove_keybinding | ||||
| meta_display_get_keybinding_action | ||||
| meta_display_set_input_focus_window | ||||
| meta_display_focus_the_no_focus_window | ||||
| meta_display_sort_windows_by_stacking | ||||
| meta_display_get_leader_window | ||||
| meta_display_add_ignored_crossing_serial | ||||
| meta_display_unmanage_screen | ||||
| meta_display_clear_mouse_mode | ||||
| MetaDisplay | ||||
| MetaDisplayClass | ||||
| <SUBSECTION Standard> | ||||
| META_DISPLAY | ||||
| META_DISPLAY_CLASS | ||||
| META_DISPLAY_GET_CLASS | ||||
| META_IS_DISPLAY | ||||
| META_IS_DISPLAY_CLASS | ||||
| META_TYPE_DISPLAY | ||||
| meta_display_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>errors</FILE> | ||||
| meta_error_trap_push | ||||
| meta_error_trap_pop | ||||
| meta_error_trap_push_with_return | ||||
| meta_error_trap_pop_with_return | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>gradient</FILE> | ||||
| MetaGradientType | ||||
| meta_gradient_create_simple | ||||
| meta_gradient_create_multi | ||||
| meta_gradient_create_interwoven | ||||
| meta_gradient_add_alpha | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>group</FILE> | ||||
| MetaGroup | ||||
| meta_window_get_group | ||||
| meta_window_compute_group | ||||
| meta_window_shutdown_group | ||||
| meta_window_group_leader_changed | ||||
| meta_display_lookup_group | ||||
| meta_group_list_windows | ||||
| meta_group_update_layers | ||||
| meta_group_get_startup_id | ||||
| meta_group_get_size | ||||
| meta_group_property_notify | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>keybindings</FILE> | ||||
| MetaKeyBinding | ||||
| META_TYPE_KEY_BINDING | ||||
| meta_key_binding_get_name | ||||
| meta_key_binding_get_modifiers | ||||
| meta_key_binding_get_mask | ||||
| meta_key_binding_is_builtin | ||||
| meta_keybindings_set_custom_handler | ||||
| meta_keybindings_switch_window | ||||
| meta_screen_ungrab_all_keys | ||||
| meta_screen_grab_all_keys | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>main</FILE> | ||||
| meta_get_option_context | ||||
| meta_init | ||||
| meta_run | ||||
| meta_get_replace_current_wm | ||||
| meta_set_wm_name | ||||
| meta_set_gnome_wm_keybindings | ||||
| MetaExitCode | ||||
| meta_exit | ||||
| meta_quit | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-background</FILE> | ||||
| <TITLE>MetaBackground</TITLE> | ||||
| MetaBackgroundEffects | ||||
| MetaBackground | ||||
| MetaBackgroundClass | ||||
| meta_background_new | ||||
| meta_background_copy | ||||
| meta_background_load_gradient | ||||
| meta_background_load_color | ||||
| meta_background_load_still_frame | ||||
| meta_background_load_file_async | ||||
| meta_background_load_file_finish | ||||
| meta_background_get_filename | ||||
| meta_background_get_style | ||||
| meta_background_get_shading | ||||
| meta_background_get_color | ||||
| meta_background_get_second_color | ||||
| <SUBSECTION Standard> | ||||
| META_BACKGROUND | ||||
| META_BACKGROUND_CLASS | ||||
| META_BACKGROUND_GET_CLASS | ||||
| META_IS_BACKGROUND | ||||
| META_IS_BACKGROUND_CLASS | ||||
| META_TYPE_BACKGROUND | ||||
| MetaBackgroundPrivate | ||||
| meta_background_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-background-actor</FILE> | ||||
| <TITLE>MetaBackgroundActor</TITLE> | ||||
| MetaBackgroundActor | ||||
| MetaBackgroundActorClass | ||||
| meta_background_actor_new_for_screen | ||||
| MetaSnippetHook | ||||
| meta_background_actor_add_glsl_snippet | ||||
| meta_background_actor_set_uniform_float | ||||
| <SUBSECTION Standard> | ||||
| META_BACKGROUND_ACTOR | ||||
| META_BACKGROUND_ACTOR_CLASS | ||||
| META_BACKGROUND_ACTOR_GET_CLASS | ||||
| META_IS_BACKGROUND_ACTOR | ||||
| META_IS_BACKGROUND_ACTOR_CLASS | ||||
| META_TYPE_BACKGROUND_ACTOR | ||||
| MetaBackgroundActorPrivate | ||||
| meta_background_actor_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-background-group</FILE> | ||||
| <TITLE>MetaBackgroundGroup</TITLE> | ||||
| MetaBackgroundGroupClass | ||||
| meta_background_group_new | ||||
| <SUBSECTION Standard> | ||||
| META_BACKGROUND_GROUP | ||||
| META_BACKGROUND_GROUP_CLASS | ||||
| META_BACKGROUND_GROUP_GET_CLASS | ||||
| META_IS_BACKGROUND_GROUP | ||||
| META_IS_BACKGROUND_GROUP_CLASS | ||||
| META_TYPE_BACKGROUND_GROUP | ||||
| MetaBackgroundGroupPrivate | ||||
| meta_background_group_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-plugin</FILE> | ||||
| <TITLE>MetaPlugin</TITLE> | ||||
| MetaPlugin | ||||
| MetaPluginClass | ||||
| MetaPluginInfo | ||||
| meta_plugin_running | ||||
| meta_plugin_debug_mode | ||||
| meta_plugin_get_info | ||||
| MetaPluginVersion | ||||
| META_PLUGIN_DECLARE | ||||
| meta_plugin_switch_workspace_completed | ||||
| meta_plugin_minimize_completed | ||||
| meta_plugin_maximize_completed | ||||
| meta_plugin_unmaximize_completed | ||||
| meta_plugin_map_completed | ||||
| meta_plugin_destroy_completed | ||||
| MetaModalOptions | ||||
| meta_plugin_begin_modal | ||||
| meta_plugin_end_modal | ||||
| meta_plugin_get_screen | ||||
| meta_plugin_manager_set_plugin_type | ||||
| <SUBSECTION Standard> | ||||
| META_IS_PLUGIN | ||||
| META_IS_PLUGIN_CLASS | ||||
| META_PLUGIN | ||||
| META_PLUGIN_CLASS | ||||
| META_PLUGIN_GET_CLASS | ||||
| META_TYPE_PLUGIN | ||||
| MetaPluginPrivate | ||||
| meta_plugin_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-shadow-factory</FILE> | ||||
| MetaShadowParams | ||||
| meta_shadow_factory_get_default | ||||
| meta_shadow_factory_set_params | ||||
| meta_shadow_factory_get_params | ||||
| MetaShadowFactory | ||||
| MetaShadowFactoryClass | ||||
| <SUBSECTION Standard> | ||||
| META_IS_SHADOW_FACTORY | ||||
| META_IS_SHADOW_FACTORY_CLASS | ||||
| META_SHADOW_FACTORY | ||||
| META_SHADOW_FACTORY_CLASS | ||||
| META_SHADOW_FACTORY_GET_CLASS | ||||
| META_TYPE_SHADOW_FACTORY | ||||
| meta_shadow_factory_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-shaped-texture</FILE> | ||||
| <TITLE>MetaShapedTexture</TITLE> | ||||
| MetaShapedTexture | ||||
| MetaShapedTextureClass | ||||
| meta_shaped_texture_new | ||||
| meta_shaped_texture_set_create_mipmaps | ||||
| meta_shaped_texture_update_area | ||||
| meta_shaped_texture_set_pixmap | ||||
| meta_shaped_texture_get_texture | ||||
| meta_shaped_texture_set_mask_texture | ||||
| meta_shaped_texture_set_clip_region | ||||
| meta_shaped_texture_get_image | ||||
| <SUBSECTION Standard> | ||||
| META_IS_SHAPED_TEXTURE | ||||
| META_IS_SHAPED_TEXTURE_CLASS | ||||
| META_SHAPED_TEXTURE | ||||
| META_SHAPED_TEXTURE_CLASS | ||||
| META_SHAPED_TEXTURE_GET_CLASS | ||||
| META_TYPE_SHAPED_TEXTURE | ||||
| MetaShapedTexturePrivate | ||||
| meta_shaped_texture_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-window-actor</FILE> | ||||
| <TITLE>MetaWindowActor</TITLE> | ||||
| MetaWindowActor | ||||
| MetaWindowActorClass | ||||
| meta_window_actor_get_x_window | ||||
| meta_window_actor_get_workspace | ||||
| meta_window_actor_get_meta_window | ||||
| meta_window_actor_get_texture | ||||
| meta_window_actor_is_override_redirect | ||||
| meta_window_actor_get_description | ||||
| meta_window_actor_showing_on_its_workspace | ||||
| meta_window_actor_is_destroyed | ||||
| <SUBSECTION Standard> | ||||
| META_IS_WINDOW_ACTOR | ||||
| META_IS_WINDOW_ACTOR_CLASS | ||||
| META_TYPE_WINDOW_ACTOR | ||||
| META_WINDOW_ACTOR | ||||
| META_WINDOW_ACTOR_CLASS | ||||
| META_WINDOW_ACTOR_GET_CLASS | ||||
| MetaWindowActorPrivate | ||||
| meta_window_actor_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>prefs</FILE> | ||||
| MetaPreference | ||||
| MetaPrefsChangedFunc | ||||
| meta_prefs_add_listener | ||||
| meta_prefs_remove_listener | ||||
| meta_prefs_init | ||||
| meta_prefs_override_preference_schema | ||||
| meta_preference_to_string | ||||
| meta_prefs_get_mouse_button_mods | ||||
| meta_prefs_get_mouse_button_resize | ||||
| meta_prefs_get_mouse_button_menu | ||||
| meta_prefs_get_focus_mode | ||||
| meta_prefs_get_focus_new_windows | ||||
| meta_prefs_get_attach_modal_dialogs | ||||
| meta_prefs_get_raise_on_click | ||||
| meta_prefs_get_theme | ||||
| meta_prefs_get_titlebar_font | ||||
| meta_prefs_get_num_workspaces | ||||
| meta_prefs_get_dynamic_workspaces | ||||
| meta_prefs_get_application_based | ||||
| meta_prefs_get_disable_workarounds | ||||
| meta_prefs_get_auto_raise | ||||
| meta_prefs_get_auto_raise_delay | ||||
| meta_prefs_get_focus_change_on_pointer_rest | ||||
| meta_prefs_get_gnome_accessibility | ||||
| meta_prefs_get_gnome_animations | ||||
| meta_prefs_get_edge_tiling | ||||
| meta_prefs_get_auto_maximize | ||||
| meta_prefs_get_button_layout | ||||
| meta_prefs_get_action_double_click_titlebar | ||||
| meta_prefs_get_action_middle_click_titlebar | ||||
| meta_prefs_get_action_right_click_titlebar | ||||
| meta_prefs_set_num_workspaces | ||||
| meta_prefs_get_workspace_name | ||||
| meta_prefs_change_workspace_name | ||||
| meta_prefs_get_cursor_theme | ||||
| meta_prefs_get_cursor_size | ||||
| meta_prefs_get_compositing_manager | ||||
| meta_prefs_get_force_fullscreen | ||||
| meta_prefs_set_force_fullscreen | ||||
| meta_prefs_get_workspaces_only_on_primary | ||||
| meta_prefs_get_no_tab_popup | ||||
| meta_prefs_set_no_tab_popup | ||||
| meta_prefs_get_draggable_border_width | ||||
| meta_prefs_get_ignore_request_hide_titlebar | ||||
| meta_prefs_set_ignore_request_hide_titlebar | ||||
| MetaKeyBindingAction | ||||
| MetaKeyBindingFlags | ||||
| MetaKeyCombo | ||||
| MetaKeyHandlerFunc | ||||
| meta_prefs_get_keybindings | ||||
| meta_prefs_get_keybinding_action | ||||
| meta_prefs_get_window_binding | ||||
| meta_prefs_get_overlay_binding | ||||
| meta_prefs_get_visual_bell | ||||
| meta_prefs_bell_is_audible | ||||
| meta_prefs_get_visual_bell_type | ||||
| MetaKeyHandler | ||||
| <SUBSECTION Standard> | ||||
| meta_key_binding_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>screen</FILE> | ||||
| MetaScreen | ||||
| MetaScreenClass | ||||
| meta_screen_get_screen_number | ||||
| meta_screen_get_display | ||||
| meta_screen_get_xroot | ||||
| meta_screen_get_size | ||||
| meta_screen_get_compositor_data | ||||
| meta_screen_set_compositor_data | ||||
| meta_screen_for_x_screen | ||||
| meta_screen_set_cm_selection | ||||
| meta_screen_unset_cm_selection | ||||
| meta_screen_get_startup_sequences | ||||
| meta_screen_get_workspaces | ||||
| meta_screen_get_n_workspaces | ||||
| meta_screen_get_workspace_by_index | ||||
| meta_screen_remove_workspace | ||||
| meta_screen_append_new_workspace | ||||
| meta_screen_get_active_workspace_index | ||||
| meta_screen_get_active_workspace | ||||
| meta_screen_get_n_monitors | ||||
| meta_screen_get_primary_monitor | ||||
| meta_screen_get_current_monitor | ||||
| meta_screen_get_monitor_geometry | ||||
| meta_screen_get_monitor_index_for_rect | ||||
| meta_screen_focus_default_window | ||||
| MetaScreenCorner | ||||
| meta_screen_override_workspace_layout | ||||
| <SUBSECTION Standard> | ||||
| META_IS_SCREEN | ||||
| META_IS_SCREEN_CLASS | ||||
| META_SCREEN | ||||
| META_SCREEN_CLASS | ||||
| META_SCREEN_GET_CLASS | ||||
| META_TYPE_SCREEN | ||||
| meta_screen_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>util</FILE> | ||||
| meta_is_verbose | ||||
| meta_set_verbose | ||||
| meta_is_debugging | ||||
| meta_set_debugging | ||||
| meta_is_syncing | ||||
| meta_set_syncing | ||||
| meta_set_replace_current_wm | ||||
| meta_debug_spew_real | ||||
| meta_verbose_real | ||||
| meta_bug | ||||
| meta_warning | ||||
| meta_fatal | ||||
| MetaDebugTopic | ||||
| meta_topic_real | ||||
| meta_add_verbose_topic | ||||
| meta_remove_verbose_topic | ||||
| meta_push_no_msg_prefix | ||||
| meta_pop_no_msg_prefix | ||||
| meta_unsigned_long_equal | ||||
| meta_unsigned_long_hash | ||||
| meta_frame_type_to_string | ||||
| meta_gravity_to_string | ||||
| _ | ||||
| N_ | ||||
| meta_g_utf8_strndup | ||||
| meta_free_gslist_and_elements | ||||
| meta_show_dialog | ||||
| meta_debug_spew | ||||
| meta_verbose | ||||
| meta_topic | ||||
| MetaLaterType | ||||
| meta_later_add | ||||
| meta_later_remove | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>window</FILE> | ||||
| MetaWindow | ||||
| MetaWindowClass | ||||
| MetaWindowType | ||||
| MetaMaximizeFlags | ||||
| meta_window_get_frame | ||||
| meta_window_has_focus | ||||
| meta_window_appears_focused | ||||
| meta_window_is_shaded | ||||
| meta_window_is_monitor_sized | ||||
| meta_window_is_override_redirect | ||||
| meta_window_is_skip_taskbar | ||||
| meta_window_get_rect | ||||
| meta_window_get_input_rect | ||||
| meta_window_get_outer_rect | ||||
| meta_window_get_screen | ||||
| meta_window_get_display | ||||
| meta_window_get_xwindow | ||||
| meta_window_get_window_type | ||||
| meta_window_get_window_type_atom | ||||
| meta_window_get_workspace | ||||
| meta_window_get_monitor | ||||
| meta_window_is_on_all_workspaces | ||||
| meta_window_located_on_workspace | ||||
| meta_window_is_hidden | ||||
| meta_window_activate | ||||
| meta_window_activate_with_workspace | ||||
| meta_window_get_description | ||||
| meta_window_get_wm_class | ||||
| meta_window_get_wm_class_instance | ||||
| meta_window_showing_on_its_workspace | ||||
| meta_window_get_gtk_application_id | ||||
| meta_window_get_gtk_unique_bus_name | ||||
| meta_window_get_gtk_application_object_path | ||||
| meta_window_get_gtk_window_object_path | ||||
| meta_window_get_gtk_app_menu_object_path | ||||
| meta_window_get_gtk_menubar_object_path | ||||
| meta_window_move | ||||
| meta_window_move_frame | ||||
| meta_window_move_resize_frame | ||||
| meta_window_move_to_monitor | ||||
| meta_window_resize | ||||
| meta_window_set_demands_attention | ||||
| meta_window_unset_demands_attention | ||||
| meta_window_get_startup_id | ||||
| meta_window_change_workspace_by_index | ||||
| meta_window_change_workspace | ||||
| meta_window_get_compositor_private | ||||
| meta_window_set_compositor_private | ||||
| meta_window_configure_notify | ||||
| meta_window_get_role | ||||
| meta_window_get_layer | ||||
| meta_window_find_root_ancestor | ||||
| meta_window_is_ancestor_of_transient | ||||
| MetaWindowForeachFunc | ||||
| meta_window_foreach_transient | ||||
| meta_window_foreach_ancestor | ||||
| meta_window_get_maximized | ||||
| meta_window_is_fullscreen | ||||
| meta_window_is_on_primary_monitor | ||||
| meta_window_requested_bypass_compositor | ||||
| meta_window_requested_dont_bypass_compositor | ||||
| meta_window_is_mapped | ||||
| meta_window_toplevel_is_mapped | ||||
| meta_window_get_icon_geometry | ||||
| meta_window_set_icon_geometry | ||||
| meta_window_maximize | ||||
| meta_window_unmaximize | ||||
| meta_window_minimize | ||||
| meta_window_unminimize | ||||
| meta_window_raise | ||||
| meta_window_lower | ||||
| meta_window_get_title | ||||
| meta_window_get_transient_for | ||||
| meta_window_get_transient_for_as_xid | ||||
| meta_window_delete | ||||
| meta_window_get_stable_sequence | ||||
| meta_window_get_user_time | ||||
| meta_window_get_pid | ||||
| meta_window_get_client_machine | ||||
| meta_window_is_remote | ||||
| meta_window_is_modal | ||||
| meta_window_is_attached_dialog | ||||
| meta_window_get_mutter_hints | ||||
| meta_window_get_frame_type | ||||
| meta_window_get_frame_bounds | ||||
| meta_window_get_tile_match | ||||
| meta_window_make_fullscreen | ||||
| meta_window_unmake_fullscreen | ||||
| meta_window_make_above | ||||
| meta_window_unmake_above | ||||
| meta_window_shade | ||||
| meta_window_unshade | ||||
| meta_window_stick | ||||
| meta_window_unstick | ||||
| meta_window_kill | ||||
| meta_window_focus | ||||
| meta_window_check_alive | ||||
| meta_window_get_work_area_current_monitor | ||||
| meta_window_get_work_area_for_monitor | ||||
| meta_window_get_work_area_all_monitors | ||||
| meta_window_begin_grab_op | ||||
| <SUBSECTION Standard> | ||||
| META_IS_WINDOW | ||||
| META_IS_WINDOW_CLASS | ||||
| META_TYPE_WINDOW | ||||
| META_WINDOW | ||||
| META_WINDOW_CLASS | ||||
| META_WINDOW_GET_CLASS | ||||
| meta_window_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>workspace</FILE> | ||||
| MetaWorkspace | ||||
| MetaWorkspaceClass | ||||
| meta_workspace_index | ||||
| meta_workspace_get_screen | ||||
| meta_workspace_list_windows | ||||
| meta_workspace_get_work_area_for_monitor | ||||
| meta_workspace_get_work_area_all_monitors | ||||
| meta_workspace_activate | ||||
| meta_workspace_activate_with_focus | ||||
| meta_workspace_update_window_hints | ||||
| meta_workspace_set_builtin_struts | ||||
| meta_workspace_get_neighbor | ||||
| <SUBSECTION Standard> | ||||
| META_IS_WORKSPACE | ||||
| META_IS_WORKSPACE_CLASS | ||||
| META_TYPE_WORKSPACE | ||||
| META_WORKSPACE | ||||
| META_WORKSPACE_CLASS | ||||
| META_WORKSPACE_GET_CLASS | ||||
| meta_workspace_get_type | ||||
| </SECTION> | ||||
|  | ||||
| @@ -1,15 +0,0 @@ | ||||
| <part id="mutter-overview"> | ||||
|  | ||||
|   <title>Overview</title> | ||||
|  | ||||
|   <partintro> | ||||
|  | ||||
|     <para>Mutter is a GObject-based library for creating compositing window managers.</para> | ||||
|  | ||||
|     <para>Compositors that wish to use Mutter must implement a subclass of #MetaPlugin and register it with meta_plugin_manager_set_plugin_type() before calling meta_init() but after g_type_init().</para> | ||||
|  | ||||
|     <para>#MetaPlugin provides virtual functions that allow to override default behavior in the window management code, such as the effect to perform when a window is created or when switching workspaces.</para> | ||||
|  | ||||
|   </partintro> | ||||
|  | ||||
| </part> | ||||
| @@ -1,100 +0,0 @@ | ||||
| <part id="running-mutter"> | ||||
|  | ||||
|   <title>Running Mutter</title> | ||||
|  | ||||
|   <partintro> | ||||
|  | ||||
|     <section id="environment-variables"> | ||||
|       <title>Environment Variables</title> | ||||
|  | ||||
|       <para> | ||||
|         Mutter automatically checks environment variables during | ||||
|         its initialization. These environment variables are meant | ||||
|         as debug tools or overrides for default behaviours: | ||||
|       </para> | ||||
|  | ||||
|       <variablelist> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_VERBOSE</term> | ||||
|           <listitem> | ||||
|             <para>Enable verbose mode, in which more information is printed to the console. Mutter needs to be built with the --enable-verbose-mode option (enabled by default). For more fine-grained control of the output, see meta_add_verbose_topic().</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG</term> | ||||
|           <listitem> | ||||
|             <para>Traps and prints X errors to the console.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_G_FATAL_WARNINGS</term> | ||||
|           <listitem> | ||||
|             <para>Causes any logging from the domains Mutter, Gtk, Gdk, Pango or GLib to terminate the process (only when using the log functions in GLib).</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_USE_LOGFILE</term> | ||||
|           <listitem> | ||||
|             <para>Log all messages to a temporary file.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG_XINERAMA</term> | ||||
|           <listitem> | ||||
|             <para>Log extra information about support of the XINERAMA extension.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG_SM</term> | ||||
|           <listitem> | ||||
|             <para>Log extra information about session management.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG_BUTTON_GRABS</term> | ||||
|           <listitem> | ||||
|             <para>Log extra information about button grabs.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_SYNC</term> | ||||
|           <listitem> | ||||
|             <para>Call XSync after each X call.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DISPLAY</term> | ||||
|           <listitem> | ||||
|             <para>Name of the X11 display to use.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>META_DISABLE_MIPMAPS</term> | ||||
|           <listitem> | ||||
|             <para>Disable use of mipmaps for the textures that back window pixmaps.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_USE_STATIC_GRAVITY</term> | ||||
|           <listitem> | ||||
|             <para>Enable support for clients with static bit-gravity.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_WM_CLASS_FILTER</term> | ||||
|           <listitem> | ||||
|             <para>Comma-separated list of WM_CLASS names to which to restrict Mutter to.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DISABLE_FALLBACK_COLOR</term> | ||||
|           <listitem> | ||||
|             <para>Disable fallback for themed colors, for easier detection of typographical errors.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|       </variablelist> | ||||
|  | ||||
|     </section> | ||||
|  | ||||
|   </partintro> | ||||
| </part> | ||||
| @@ -39,11 +39,4 @@ environment.</description> | ||||
|       <gnome:userid>otaylor</gnome:userid> | ||||
|     </foaf:Person> | ||||
|   </maintainer> | ||||
|   <maintainer> | ||||
|     <foaf:Person> | ||||
|       <foaf:name>Florian Müllner</foaf:name> | ||||
|       <foaf:mbox rdf:resource="mailto:fmuellner@gnome.org" /> | ||||
|       <gnome:userid>fmuellner</gnome:userid> | ||||
|     </foaf:Person> | ||||
|   </maintainer> | ||||
| </Project> | ||||
|   | ||||
| @@ -80,7 +80,6 @@ sr@latin | ||||
| sv | ||||
| ta | ||||
| te | ||||
| tg | ||||
| th | ||||
| tk | ||||
| tr | ||||
|   | ||||
| @@ -1,10 +1,7 @@ | ||||
| # List of source files containing translatable strings. | ||||
| # Please keep this file sorted alphabetically. | ||||
| src/50-mutter-navigation.xml.in | ||||
| src/50-mutter-system.xml.in | ||||
| src/50-mutter-windows.xml.in | ||||
| src/compositor/compositor.c | ||||
| src/compositor/meta-background.c | ||||
| src/core/all-keybindings.h | ||||
| src/core/bell.c | ||||
| src/core/core.c | ||||
| src/core/delete.c | ||||
| @@ -22,7 +19,7 @@ src/core/window-props.c | ||||
| src/core/xprops.c | ||||
| src/mutter.desktop.in | ||||
| src/mutter-wm.desktop.in | ||||
| src/org.gnome.mutter.gschema.xml.in | ||||
| src/mutter.schemas.in | ||||
| src/tools/mutter-message.c | ||||
| src/ui/frames.c | ||||
| src/ui/menu.c | ||||
|   | ||||
							
								
								
									
										184
									
								
								po/ast.po
									
									
									
									
									
								
							
							
						
						
									
										184
									
								
								po/ast.po
									
									
									
									
									
								
							| @@ -37,6 +37,7 @@ msgstr "Petición d'información ventana desconocida: %d" | ||||
| #. Translators: %s is a window title | ||||
| #: ../src/core/delete.c:95 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "<tt>%s</tt> is not responding." | ||||
| msgstr "<tt>%s</tt> nun ta respondiendo." | ||||
|  | ||||
| @@ -121,6 +122,7 @@ msgstr "Comandu de terminal nun definíu.\n" | ||||
|  | ||||
| #: ../src/core/main.c:130 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| @@ -259,6 +261,7 @@ msgstr "Error axustando númberu d'arees de trabayu a %d: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2028 ../src/core/prefs.c:2531 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Espaciu de Trabayu %d" | ||||
|  | ||||
| @@ -272,6 +275,7 @@ msgstr "\"%s\" atopau na base de datos de configuración nun ye un valor válidu | ||||
|  | ||||
| #: ../src/core/prefs.c:2612 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting name for workspace %d to \"%s\": %s\n" | ||||
| msgstr "Fallu al afitar nome pal espaciu de trabayu %d a \"%s\": %s\n" | ||||
|  | ||||
| @@ -282,16 +286,19 @@ msgstr "Fallu al afitar l'estáu del compositor: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2845 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting clutter plugin list: %s\n" | ||||
| msgstr "Fallu al afitar la llista desordenada de plugin: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2889 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting live hidden windows status status: %s\n" | ||||
| msgstr "Fallu al afitar l'estáu de les ventanes anubríes: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2917 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting no tab popup status: %s\n" | ||||
| msgstr "Fallu al afitar l'estáu de les llingüetes emerxentes: %s\n" | ||||
|  | ||||
| @@ -351,6 +358,7 @@ msgstr "Falló analizar ficheru de sesión guardáu: %s\n" | ||||
|  | ||||
| #: ../src/core/session.c:1198 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "<mutter_session> attribute seen but we already have the session ID" | ||||
| msgstr "Vióse l'atributu <mutter_session> pero yá tenemos la ID de sesión" | ||||
|  | ||||
| @@ -396,6 +404,7 @@ msgstr "Abiertu archivu log %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:139 ../src/tools/mutter-message.c:176 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter compilose ensin sofitu pal mou testu\n" | ||||
|  | ||||
| @@ -490,19 +499,19 @@ msgid "" | ||||
| msgstr "La propiedá %s del ventanu 0x%lx contien un códigu UTF-8 non válidu pal " | ||||
| "elementu %d na llista\n" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:88 ../src/50-mutter-navigation.xml.in.h:18 | ||||
| #: ../src/include/all-keybindings.h:88 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Cambiar a espaciu de trabayu 1" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:90 ../src/50-mutter-navigation.xml.in.h:19 | ||||
| #: ../src/include/all-keybindings.h:90 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Cambiar a espaciu de trabayu 2" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:92 ../src/50-mutter-navigation.xml.in.h:20 | ||||
| #: ../src/include/all-keybindings.h:92 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Cambiar a espaciu de trabayu 3" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:94 ../src/50-mutter-navigation.xml.in.h:21 | ||||
| #: ../src/include/all-keybindings.h:94 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Cambiar a espaciu de trabayu 4" | ||||
|  | ||||
| @@ -631,57 +640,47 @@ msgstr "Saca una semeya d'una ventana" | ||||
| msgid "Run a terminal" | ||||
| msgstr "Executar una terminal" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:271 ../src/50-mutter-windows.xml.in.h:1 | ||||
| #: ../src/include/all-keybindings.h:271 | ||||
| msgid "Activate the window menu" | ||||
| msgstr "Activar el menú de la ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:274 ../src/50-mutter-windows.xml.in.h:13 | ||||
| #, fuzzy | ||||
| #: ../src/include/all-keybindings.h:274 | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Camudar a modu pantalla completa\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Camudar a mou pantalla completa" | ||||
| msgstr "Camudar a modu pantalla completa" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:276 ../src/50-mutter-windows.xml.in.h:14 | ||||
| #, fuzzy | ||||
| #: ../src/include/all-keybindings.h:276 | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Camudar a estáu maximizáu\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Conmutar l'estáu maximizáu" | ||||
| msgstr "Camudar a estáu maximizáu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:278 | ||||
| msgid "Toggle whether a window will always be visible over other windows" | ||||
| msgstr "Conmutar si una ventana siempres se verá encima d'otres ventanes" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:280 ../src/50-mutter-windows.xml.in.h:4 | ||||
| #: ../src/include/all-keybindings.h:280 | ||||
| msgid "Maximize window" | ||||
| msgstr "Maximizar ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:282 ../src/50-mutter-windows.xml.in.h:12 | ||||
| #: ../src/include/all-keybindings.h:282 | ||||
| msgid "Restore window" | ||||
| msgstr "Restaurar la ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:284 ../src/50-mutter-windows.xml.in.h:15 | ||||
| #: ../src/include/all-keybindings.h:284 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Activa estáu endolcáu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:286 ../src/50-mutter-windows.xml.in.h:7 | ||||
| #: ../src/include/all-keybindings.h:286 | ||||
| msgid "Minimize window" | ||||
| msgstr "Minimizar ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:288 ../src/50-mutter-windows.xml.in.h:2 | ||||
| #: ../src/include/all-keybindings.h:288 | ||||
| msgid "Close window" | ||||
| msgstr "Zarrar ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:290 ../src/50-mutter-windows.xml.in.h:8 | ||||
| #: ../src/include/all-keybindings.h:290 | ||||
| msgid "Move window" | ||||
| msgstr "Mover ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:292 ../src/50-mutter-windows.xml.in.h:11 | ||||
| #: ../src/include/all-keybindings.h:292 | ||||
| msgid "Resize window" | ||||
| msgstr "Cambiar el tamañu la ventana" | ||||
|  | ||||
| @@ -690,22 +689,18 @@ msgid "Toggle whether window is on all workspaces or just one" | ||||
| msgstr "Conmutar si la ventana apaez en toles árees de trabayu o namái nuna" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:299 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:10 | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Mover ventana al espaciu de trabayu 1" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:302 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:11 | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Mover ventana al espaciu de trabayu 2" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:305 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:12 | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Mover ventana al espaciu de trabayu 3" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:308 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:13 | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Mover ventana al espaciu de trabayu 4" | ||||
|  | ||||
| @@ -741,24 +736,19 @@ msgstr "Mover ventana al espaciu de trabayu 11" | ||||
| msgid "Move window to workspace 12" | ||||
| msgstr "Mover ventana al espaciu de trabayu 12" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:344 ../src/50-mutter-navigation.xml.in.h:7 | ||||
| #: ../src/include/all-keybindings.h:344 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Mover ventana un espaciu de trabayu a manzorga" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:347 ../src/50-mutter-navigation.xml.in.h:8 | ||||
| #, fuzzy | ||||
| #: ../src/include/all-keybindings.h:347 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Mover ventana un espaciu de trabayu a derecha\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Mover ventana un espaciu de trabayu a madrecha" | ||||
| msgstr "Mover ventana un espaciu de trabayu a derecha" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:350 ../src/50-mutter-navigation.xml.in.h:9 | ||||
| #: ../src/include/all-keybindings.h:350 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Mover ventana un espaciu de trabayu p'arriba" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:353 ../src/50-mutter-navigation.xml.in.h:6 | ||||
| #: ../src/include/all-keybindings.h:353 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Mover ventana un espaciu de trabayu p'abaxo" | ||||
|  | ||||
| @@ -767,29 +757,19 @@ msgid "Raise window if it's covered by another window, otherwise lower it" | ||||
| msgstr "" | ||||
| "Llevantar la ventana si ta cubierta por otra ventana, minimizala n'otru casu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:358 ../src/50-mutter-windows.xml.in.h:9 | ||||
| #, fuzzy | ||||
| #: ../src/include/all-keybindings.h:358 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Poner el ventanu en primer planu\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Poner la ventana en primer planu" | ||||
| msgstr "Poner el ventanu en primer planu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:360 ../src/50-mutter-windows.xml.in.h:3 | ||||
| #, fuzzy | ||||
| #: ../src/include/all-keybindings.h:360 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Ventanu más baxu per debaxo d'otros ventanos\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Ventana más baxa per debaxo d'otres ventanes" | ||||
| msgstr "Ventanu más baxu per debaxo d'otros ventanos" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:364 ../src/50-mutter-windows.xml.in.h:6 | ||||
| #: ../src/include/all-keybindings.h:364 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximizar ventana verticalmente" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:368 ../src/50-mutter-windows.xml.in.h:5 | ||||
| #: ../src/include/all-keybindings.h:368 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximizar ventana horizontalmente" | ||||
|  | ||||
| @@ -1003,6 +983,7 @@ msgstr "Espaciu de Trabayu %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:213 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Espaciu de Trabayu 1_0" | ||||
|  | ||||
| @@ -1743,6 +1724,7 @@ msgstr "Nun se permite testu dientro del elementu <%s>" | ||||
| #: ../src/ui/theme-parser.c:3748 ../src/ui/theme-parser.c:3760 | ||||
| #: ../src/ui/theme-parser.c:3772 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> especificáu dos vegaes pa esti tema" | ||||
|  | ||||
| @@ -1954,96 +1936,6 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "%d espresiones de coordenaes interpretaes en %g segundos (%g segundos de " | ||||
| "media)\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Anubrir toles ventanes normales" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:2 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Mover al área de trabayu d'arriba" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:3 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Mover al área de trabayu d'abaxo" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:4 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Mover al área de trabayu de la izquierda" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:5 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Mover al área de trabayu de la derecha" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:14 | ||||
| #, fuzzy | ||||
| msgid "Navigation" | ||||
| msgstr "Navegación" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:15 | ||||
| #, fuzzy | ||||
| msgid "Switch applications" | ||||
| msgstr "Movese ente aplicaciones" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:16 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls" | ||||
| msgstr "Cambiar ente controles del sistema" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:17 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Movese ente los controles del sistema direutamente" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:22 | ||||
| #, fuzzy | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Cambiar ventanes direutamente" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:23 | ||||
| #, fuzzy | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Movese ente les ventanes d'una aplicación direutamente" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:24 | ||||
| #, fuzzy | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Movese ente les ventanes d'una aplicación" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Amosar el resume d'actividaes" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:2 | ||||
| #, fuzzy | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Amosar l'elementu «executar comando»" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:3 | ||||
| #, fuzzy | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:10 | ||||
| #, fuzzy | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Llevantar la ventana si ta cubierta, minimizala n'otru casu" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:16 | ||||
| #, fuzzy | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Conmutar la ventana en toles árees de trabayu o namái nuna" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:17 | ||||
| #, fuzzy | ||||
| msgid "Windows" | ||||
| msgstr "Ventanes" | ||||
|  | ||||
| #~ msgid "Desktop" | ||||
| #~ msgstr "Escritoriu" | ||||
|  | ||||
|   | ||||
							
								
								
									
										2743
									
								
								po/bn_IN.po
									
									
									
									
									
								
							
							
						
						
									
										2743
									
								
								po/bn_IN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1316
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
							
						
						
									
										1316
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1253
									
								
								po/en_GB.po
									
									
									
									
									
								
							
							
						
						
									
										1253
									
								
								po/en_GB.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										576
									
								
								po/et.po
									
									
									
									
									
								
							
							
						
						
									
										576
									
								
								po/et.po
									
									
									
									
									
								
							| @@ -7,174 +7,253 @@ | ||||
| # | ||||
| # Tõivo Leedjärv <toivo linux ee>, 2004. | ||||
| # Ivar Smolin <okul linux ee>, 2005, 2006, 2009–2011. | ||||
| # Mattias Põldaru <mahfiaz@gmail.com>, 2008–2011, 2012, 2013. | ||||
| # Mattias Põldaru <mahfiaz gmail com>, 2008–2011. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter MASTER\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-12 18:53+0000\n" | ||||
| "PO-Revision-Date: 2013-03-12 20:55+0300\n" | ||||
| "Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n" | ||||
| "Language-Team: Estonian <>\n" | ||||
| "Language: et\n" | ||||
| "product=mutter&component=general\n" | ||||
| "POT-Creation-Date: 2011-03-07 23:35+0000\n" | ||||
| "PO-Revision-Date: 2011-03-09 06:41+0200\n" | ||||
| "Last-Translator: Ivar Smolin <okul@linux.ee>\n" | ||||
| "Language-Team: Estonian <gnome-et@linux.ee>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
|  | ||||
| msgid "Navigation" | ||||
| msgstr "Navigeerimine" | ||||
|  | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Akna liigutamine 1. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Akna liigutamine 2. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Akna liigutamine 3. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Akna liigutamine 4. tööalale" | ||||
|  | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Akna tõstmine vasakpoolsele tööalale" | ||||
|  | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Akna tõstmine parempoolsele tööalale" | ||||
|  | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Akna tõstmine ülemisele tööalale" | ||||
|  | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Akna tõstmine alumisele tööalale" | ||||
|  | ||||
| msgid "Switch applications" | ||||
| msgstr "Rakenduste vahetamine" | ||||
|  | ||||
| msgid "Switch windows" | ||||
| msgstr "Akende vahetamine" | ||||
|  | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Rakenduse akende vahetamine" | ||||
|  | ||||
| msgid "Switch system controls" | ||||
| msgstr "Süsteemi juhtalade vahetamine" | ||||
|  | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Akende kohene vahetamine" | ||||
|  | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Rakenduse akende kohene vahetamine" | ||||
|  | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Süsteemi juhtalade kohene vahetamine" | ||||
|  | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Kõigi tavaliste akende peitmine" | ||||
| "Language: et\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "1. tööalale liikumine" | ||||
| msgstr "Lülitumine 1. tööalale" | ||||
|  | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "2. tööalale liikumine" | ||||
| msgstr "Lülitumine 2. tööalale" | ||||
|  | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "3. tööalale liikumine" | ||||
| msgstr "Lülitumine 3. tööalale" | ||||
|  | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "4. tööalale liikumine" | ||||
| msgstr "Lülitumine 4. tööalale" | ||||
|  | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Vasakpoolsele tööalale liikumine" | ||||
| msgid "Switch to workspace 5" | ||||
| msgstr "Lülitumine 5. tööalale" | ||||
|  | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Parempoolsele tööalale liikumine" | ||||
| msgid "Switch to workspace 6" | ||||
| msgstr "Lülitumine 6. tööalale" | ||||
|  | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Ülemisele tööalale liikumine" | ||||
| msgid "Switch to workspace 7" | ||||
| msgstr "Lülitumine 7. tööalale" | ||||
|  | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Alumisele tööalale liikumine" | ||||
| msgid "Switch to workspace 8" | ||||
| msgstr "Lülitumine 8. tööalale" | ||||
|  | ||||
| msgid "System" | ||||
| msgstr "Süsteem" | ||||
| msgid "Switch to workspace 9" | ||||
| msgstr "Lülitumine 9. tööalale" | ||||
|  | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Käsuviiba kuvamine" | ||||
| msgid "Switch to workspace 10" | ||||
| msgstr "Lülitumine 10. tööalale" | ||||
|  | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Tegevuste ülevaate avamine" | ||||
| msgid "Switch to workspace 11" | ||||
| msgstr "Lülitumine 11. tööalale" | ||||
|  | ||||
| msgid "Windows" | ||||
| msgstr "Aknad" | ||||
| msgid "Switch to workspace 12" | ||||
| msgstr "Lülitumine 12. tööalale" | ||||
|  | ||||
| msgid "Switch to workspace on the left of the current workspace" | ||||
| msgstr "Lülitumine sellest tööalast vasakul olevale tööalale" | ||||
|  | ||||
| msgid "Switch to workspace on the right of the current workspace" | ||||
| msgstr "Lülitumine sellest tööalast paremal olevale tööalale" | ||||
|  | ||||
| msgid "Switch to workspace above the current workspace" | ||||
| msgstr "Lülitumine selle tööala kohal olevale tööalale" | ||||
|  | ||||
| msgid "Switch to workspace below the current workspace" | ||||
| msgstr "Lülitumine selle tööala all olevale tööalale" | ||||
|  | ||||
| msgid "Move between windows of an application, using a popup window" | ||||
| msgstr "Liigu rakenduse akende vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move backward between windows of an application, using a popup window" | ||||
| msgstr "Liigu rakenduse akende vahel tagasisuunas, hüpikaknaga" | ||||
|  | ||||
| msgid "Move between windows, using a popup window" | ||||
| msgstr "Liigu akende vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move backward between windows, using a popup window" | ||||
| msgstr "Liigu akende vahel tagasisuunas, hüpikaknaga" | ||||
|  | ||||
| msgid "Move between panels and the desktop, using a popup window" | ||||
| msgstr "Liigu paneelide ja töölaua vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move backward between panels and the desktop, using a popup window" | ||||
| msgstr "Liigu tagasisuunas paneelide ja töölaua vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move between windows of an application immediately" | ||||
| msgstr "Liigu koheselt rakenduse akende vahel" | ||||
|  | ||||
| msgid "Move backward between windows of an application immediately" | ||||
| msgstr "Liigu koheselt rakenduse akende vahel tagasisuunas" | ||||
|  | ||||
| msgid "Move between windows immediately" | ||||
| msgstr "Liigu koheselt akende vahel" | ||||
|  | ||||
| msgid "Move backward between windows immediately" | ||||
| msgstr "Liigu koheselt akende vahel tagasisuunas" | ||||
|  | ||||
| msgid "Move between panels and the desktop immediately" | ||||
| msgstr "Liigu koheselt paneeli ja töölaua vahel" | ||||
|  | ||||
| msgid "Move backward between panels and the desktop immediately" | ||||
| msgstr "Liigu koheselt tagasisuunas paneelide ja töölaua vahel" | ||||
|  | ||||
| msgid "Hide all normal windows and set focus to the desktop" | ||||
| msgstr "Peida kõik tavalised aknad ja fokuseeri töölaud" | ||||
|  | ||||
| msgid "Show the panel's main menu" | ||||
| msgstr "Paneeli peamenüü näitamine" | ||||
|  | ||||
| msgid "Show the panel's \"Run Application\" dialog box" | ||||
| msgstr "Paneeli dialoogi \"Käivita rakendus\" näitamine" | ||||
|  | ||||
| msgid "Start or stop recording the session" | ||||
| msgstr "Seansi salvestamise käivitamine või seiskamine" | ||||
|  | ||||
| msgid "Take a screenshot" | ||||
| msgstr "Kuvatõmmise võtmine" | ||||
|  | ||||
| msgid "Take a screenshot of a window" | ||||
| msgstr "Kuvatõmmise võtmine aknast" | ||||
|  | ||||
| msgid "Run a terminal" | ||||
| msgstr "Terminali käivitamine" | ||||
|  | ||||
| msgid "Activate the window menu" | ||||
| msgstr "Aknamenüü avamine" | ||||
| msgstr "Aknamenüü aktiveerimine" | ||||
|  | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "Täisekraanoleku vahetamine" | ||||
| msgstr "Täisekraanivaate sisse- ja väljalülitamine" | ||||
|  | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "Maksimeeritud oleku vahetamine" | ||||
| msgstr "Maksimeeritud oleku sisse- ja väljalülitamine" | ||||
|  | ||||
| msgid "Toggle whether a window will always be visible over other windows" | ||||
| msgstr "Lüliti määrab, kas aken on alati teiste akende kohal nähtav" | ||||
|  | ||||
| msgid "Maximize window" | ||||
| msgstr "Akna maksimeerimine" | ||||
|  | ||||
| msgid "Restore window" | ||||
| msgstr "Akna taastamine" | ||||
| msgstr "Taasta akna suurus" | ||||
|  | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Varjatud oleku vahetamine" | ||||
| msgstr "Varjatud oleku lüliti" | ||||
|  | ||||
| msgid "Minimize window" | ||||
| msgstr "Akna minimeerimine" | ||||
|  | ||||
| msgid "Close window" | ||||
| msgstr "Akna sulgemine" | ||||
|  | ||||
| msgid "Hide window" | ||||
| msgstr "Peida aken" | ||||
|  | ||||
| msgid "Move window" | ||||
| msgstr "Akna liigutamine" | ||||
| msgstr "Teisalda aken" | ||||
|  | ||||
| msgid "Resize window" | ||||
| msgstr "Akna suuruse muutmine" | ||||
| msgstr "Muuda akna suurust" | ||||
|  | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Akna kõigil või ühel tööalal olemise vahetamine" | ||||
| msgid "Toggle whether window is on all workspaces or just one" | ||||
| msgstr "Lüliti määrab, kas aken on kõigil tööaladel või ainult ühel" | ||||
|  | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Akna tõstmine, kui see on kaetud, muul juhul langetamine" | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Akna tõstmine 1. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Akna tõstmine 2. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Akna tõstmine 3. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Akna tõstmine 4. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 5" | ||||
| msgstr "Akna tõstmine 5. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 6" | ||||
| msgstr "Akna tõstmine 6. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 7" | ||||
| msgstr "Akna tõstmine 7. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 8" | ||||
| msgstr "Akna tõstmine 8. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 9" | ||||
| msgstr "Akna tõstmine 9. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 10" | ||||
| msgstr "Akna tõstmine 10. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 11" | ||||
| msgstr "Akna tõstmine 11. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 12" | ||||
| msgstr "Akna tõstmine 12. tööalale" | ||||
|  | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Akna tõstmine ühe tööala võrra vasakule" | ||||
|  | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Akna tõstmine ühe tööala võrra paremale" | ||||
|  | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Akna tõstmine ühe tööala võrra ülespoole" | ||||
|  | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Akna tõstmine ühe tööala võrra allapoole" | ||||
|  | ||||
| msgid "Raise window if it's covered by another window, otherwise lower it" | ||||
| msgstr "Tõsta aken, kui seda katab teine aken, muul juhul vii tahapoole" | ||||
|  | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Akna tõstmine teiste kohale" | ||||
| msgstr "Akna tõstmine teiste akende kohale" | ||||
|  | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Akna langetamine teiste taha" | ||||
| msgstr "Saada aken teiste taha" | ||||
|  | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Akna vertikaalne maksimeerimine" | ||||
| msgstr "Maksimeeri aken vertikaalselt" | ||||
|  | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Akna horisontaalne maksimeerimine" | ||||
| msgstr "Maksimeeri aken horisontaalselt" | ||||
|  | ||||
| msgid "View split on left" | ||||
| msgstr "Vaade poolitatakse vasakult" | ||||
| msgid "Move window to north-west (top left) corner" | ||||
| msgstr "Akna tõstmine ekraani loodepoolsesse (ülemisse vasakusse) nurka" | ||||
|  | ||||
| msgid "View split on right" | ||||
| msgstr "Vaade poolitatakse paremalt" | ||||
| msgid "Move window to north-east (top right) corner" | ||||
| msgstr "Akna tõstmine ekraani kirdepoolsesse (ülemisse paremasse) nurka" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "Teine komposiithaldur juba töötab ekraani %i kuval \"%s\"." | ||||
| msgid "Move window to south-west (bottom left) corner" | ||||
| msgstr "Akna tõstmine ekraani edelapoolsesse (alumisse vasakusse) nurka" | ||||
|  | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "failist polnud võimalik taustatekstuuri luua" | ||||
| msgid "Move window to south-east (bottom right) corner" | ||||
| msgstr "Akna tõstmine ekraani kagupoolsesse (alumisse paremasse) nurka" | ||||
|  | ||||
| msgid "Move window to north (top) side of screen" | ||||
| msgstr "Akna tõstmine ekraani põhjapoolsesse (ülemisse) serva" | ||||
|  | ||||
| msgid "Move window to south (bottom) side of screen" | ||||
| msgstr "Akna tõstmine ekraani lõunapoolsesse (alumisse) serva" | ||||
|  | ||||
| msgid "Move window to east (right) side of screen" | ||||
| msgstr "Akna tõstmine ekraani idapoolsesse (paremasse) serva" | ||||
|  | ||||
| msgid "Move window to west (left) side of screen" | ||||
| msgstr "Akna tõstmine ekraani läänepoolsesse (vasakusse) serva" | ||||
|  | ||||
| msgid "Move window to center of screen" | ||||
| msgstr "Akna tõstmine ekraani keskele" | ||||
|  | ||||
| msgid "Bell event" | ||||
| msgstr "Helina sündmus" | ||||
| @@ -183,12 +262,10 @@ msgstr "Helina sündmus" | ||||
| msgid "Unknown window information request: %d" | ||||
| msgstr "Tundmatu aknateabe päring: %d" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "„%s” ei vasta." | ||||
|  | ||||
| msgid "Application is not responding." | ||||
| msgstr "Rakendus ei vasta." | ||||
| msgid "<tt>%s</tt> is not responding." | ||||
| msgstr "<tt>%s</tt> ei vasta." | ||||
|  | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| @@ -217,9 +294,26 @@ msgstr "" | ||||
| "Mõni teine programm juba kasutab klahvi %s koos muuteklahvidega %x " | ||||
| "kiirklahvina\n" | ||||
|  | ||||
| #. Displayed when a keybinding which is | ||||
| #. * supposed to launch a program fails. | ||||
| #. | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" pole sobiv kiirklahv\n" | ||||
| msgid "" | ||||
| "There was an error running <tt>%s</tt>:\n" | ||||
| "\n" | ||||
| "%s" | ||||
| msgstr "" | ||||
| "<tt>%s</tt> käivitamisel esines viga:\n" | ||||
| "\n" | ||||
| "%s" | ||||
|  | ||||
| #, c-format | ||||
| msgid "No command %d has been defined.\n" | ||||
| msgstr "Käsku %d pole defineeritud.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "No terminal command has been defined.\n" | ||||
| msgstr "Terminalikäsku pole defineeritud.\n" | ||||
|  | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Seansihalduriga ühendumise keelamine" | ||||
| @@ -267,8 +361,41 @@ msgstr "" | ||||
| msgid "Print version" | ||||
| msgstr "Versiooni printimine" | ||||
|  | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Millist Mutteri pluginat kasutada" | ||||
| msgid "Comma-separated list of compositor plugins" | ||||
| msgstr "Komaga eraldatud nimekiri komposiitmontaaži pluginatest" | ||||
|  | ||||
| #. | ||||
| #. * We found it, but it was invalid.  Complain. | ||||
| #. * | ||||
| #. * FIXME: This replicates the original behaviour, but in the future | ||||
| #. * we might consider reverting invalid keys to their original values. | ||||
| #. * (We know the old value, so we can look up a suitable string in | ||||
| #. * the symtab.) | ||||
| #. * | ||||
| #. * (Empty comment follows so the translators don't see this.) | ||||
| #. | ||||
| #. | ||||
| #, c-format | ||||
| msgid "GConf key '%s' is set to an invalid value\n" | ||||
| msgstr "GConf võtme '%s' väärtus on vigane\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "%d stored in GConf key %s is out of range %d to %d\n" | ||||
| msgstr "" | ||||
| "%d, mis on salvestatud GConf võtmes %s, on väljaspool piirkonda %d - %d\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "GConf key \"%s\" is set to an invalid type\n" | ||||
| msgstr "GConf-i võti \"%s\" on määratud vigase tüübiga\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "GConf key %s is already in use and can't be used to override %s\n" | ||||
| msgstr "" | ||||
| "GConfi võti %s on juba kasutusel ja sellega ei saa tühistada võtit %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Can't override GConf key, %s not found\n" | ||||
| msgstr "GConfi võtit pole võimalik tühistada, võtit %s ei leitud\n" | ||||
|  | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| @@ -278,8 +405,8 @@ msgstr "" | ||||
| "ei pruugi õigesti käituda.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Fondi kirjeldust \"%s\" GSettings võtmest %s pole võimalik töödelda\n" | ||||
| msgid "Could not parse font description \"%s\" from GConf key %s\n" | ||||
| msgstr "Fondi kirjeldust \"%s\" GConf võtmest %s ei saa töödelda\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -289,6 +416,14 @@ msgstr "" | ||||
| "Seadistuste andmebaasist leitud \"%s\" ei ole sobiv väärtus hiireklahvi " | ||||
| "modifikaatoriks\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting number of workspaces to %d: %s\n" | ||||
| msgstr "Viga tööalade arvuks %d määramisel: %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Tööala %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -298,8 +433,16 @@ msgstr "" | ||||
| "\"\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Tööala %d" | ||||
| msgid "Error setting name for workspace %d to \"%s\": %s\n" | ||||
| msgstr "Viga tööalale %d nime \"%s\" määramisel: %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting live hidden windows status status: %s\n" | ||||
| msgstr "Viga varjus elushoitavate akende oleku määramisel: %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting no tab popup status: %s\n" | ||||
| msgstr "" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| @@ -397,6 +540,10 @@ msgstr "Aknahalduri hoiatus: " | ||||
| msgid "Window manager error: " | ||||
| msgstr "Aknahalduri viga: " | ||||
|  | ||||
| #. Translators: This is the title used on dialog boxes | ||||
| msgid "Mutter" | ||||
| msgstr "Mutter" | ||||
|  | ||||
| #. first time through | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -434,12 +581,6 @@ msgstr "%s (masinas %s)" | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Vigane WM_TRANSIENT_FOR aknale 0x%lx määratud %s jaoks.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "" | ||||
| "WM_TRANSIENT_FOR aknale 0x%lx määratud %s jaoks tekitaks tsüklilise " | ||||
| "korduse.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window 0x%lx has property %s\n" | ||||
| @@ -463,8 +604,18 @@ msgid "" | ||||
| "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n" | ||||
| msgstr "Omadus %s aknal 0x%lx sisaldab vigast UTF-8 %d kirjele nimekirjas\n" | ||||
|  | ||||
| msgid "Mutter" | ||||
| msgstr "Mutter" | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Modaaldialoogide kinnistamine" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether hidden windows (i.e., minimized windows and windows on " | ||||
| "other workspaces than the current one) should be kept alive." | ||||
| msgstr "" | ||||
| "Määrab, kas varjatud aknaid (nt minimeeritud ja teistel tööaladel aknad) " | ||||
| "hoitakse elus." | ||||
|  | ||||
| msgid "Live Hidden Windows" | ||||
| msgstr "Varjatud akende aktiivsus" | ||||
|  | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "Laiendatud aknaoperatsioonide korral kasutatav muuteklahv" | ||||
| @@ -481,9 +632,6 @@ msgstr "" | ||||
| "klahv\". Eeldatavasti määratakse selle seose väärtuseks vaikimisi või tühi " | ||||
| "sõne." | ||||
|  | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Modaaldialoogide kinnistamine" | ||||
|  | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| @@ -492,90 +640,43 @@ msgstr "" | ||||
| "Kui märgitud, siis eraldi tiitliribade asemel on moodaalsed dialoogid " | ||||
| "emaakna tiitliribade küljes ning liiguvad koos emaaknaga." | ||||
|  | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "Akna ümberpaigutamine selle lohistamisel ekraani serva" | ||||
|  | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
| "Kui märgitud, siis akna lohistamine ekraani külgservale maksimeerib selle " | ||||
| "vertikaalselt ja laius katab pool saadaolevast laiusest. Akna lohistamine " | ||||
| "ekraani ülaserva maksimeerib akna täielikult." | ||||
|  | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "Tööalade dünaamiline haldus" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
| "Määrab, kas tööalasid hallatakse dünaamiliselt või on nende arv staatiline " | ||||
| "(arvu määrab org.gnome.desktop.wm.preferences all võti num-workspaces)." | ||||
|  | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "Tööalad ainult peamisel" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
| "Määrab, kas tööalade vahetamine mõjutab kõiki aknaid kõigil monitoridel või " | ||||
| "ainult aknaid peamisel monitoril." | ||||
|  | ||||
| msgid "No tab popup" | ||||
| msgstr "Tabulaatoril pole hüpikakent" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
| "Kui märgitud, siis on hüpikaken ja esiletõstmise raam keelatud akende " | ||||
| "vahetamisel." | ||||
|  | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "Fookusemuutused lükatakse edasi kuni kursor peatub" | ||||
|  | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| msgstr "" | ||||
| "Kui tõene ning fookusrežiim on kas \"sloppy\" või \"mouse\", siis fookust ei " | ||||
| "vahetata kohe, kui kursor aknale liigub, vaid alles pärast kursori peatumist." | ||||
|  | ||||
| msgid "Draggable border width" | ||||
| msgstr "Lohistatava äärise laius." | ||||
|  | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "Lohistatava äärise laius. Kui kujunduse nähtavatest ääristest ei piisa, " | ||||
| "lisatakse puuduoleva osa jaoks nähtamatu ääris." | ||||
|  | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "Peaaegu monitori suurused ekraanid maksimeeritakse automaatselt" | ||||
|  | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
| "Kui lubatud, maksimeeritakse automaatselt aknad, mis on avanedes monitori " | ||||
| "suurused." | ||||
|  | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Akna valimine tabulaatori hüpikaknalt" | ||||
|  | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Tabulaatori hüpikakna katkestamine" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Kasutamine: %s\n" | ||||
|  | ||||
| msgid "Close Window" | ||||
| msgstr "Sulge aken" | ||||
|  | ||||
| msgid "Window Menu" | ||||
| msgstr "Aknamenüü" | ||||
|  | ||||
| msgid "Minimize Window" | ||||
| msgstr "Akna minimeerimine" | ||||
|  | ||||
| msgid "Maximize Window" | ||||
| msgstr "Akna maksimeerimine" | ||||
|  | ||||
| msgid "Restore Window" | ||||
| msgstr "Akna taastamine" | ||||
|  | ||||
| msgid "Roll Up Window" | ||||
| msgstr "Akna kokkukerimine" | ||||
|  | ||||
| msgid "Unroll Window" | ||||
| msgstr "Akna lahtikerimine" | ||||
|  | ||||
| msgid "Keep Window On Top" | ||||
| msgstr "Akna kõige pealmiseks määramine" | ||||
|  | ||||
| msgid "Remove Window From Top" | ||||
| msgstr "Eemalda aken kõige pealmise kohalt" | ||||
|  | ||||
| msgid "Always On Visible Workspace" | ||||
| msgstr "Alati nähtaval tööalal" | ||||
|  | ||||
| msgid "Put Window On Only One Workspace" | ||||
| msgstr "Tõsta aken ainult ühele tööalale" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Minimeeri" | ||||
| @@ -776,30 +877,6 @@ msgstr "Raami geomeetria ei määra nuppude suurust" | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Värviüleminekus peaks olema vähemalt kaks värvi" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| "parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "GTK kohandatud värvi määrang peab sisaldama sulgudes värvi nimetust ning " | ||||
| "varuvärvi, nt gtk:custom(foo,bar); väärtust \"%s\" pole võimalik töödelda" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| "_ are valid" | ||||
| msgstr "" | ||||
| "gtk:custom color_name parameetris sobimatu märk '%c', lubatud on ainult A-Za-" | ||||
| "z0-9-_" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| "fit the format" | ||||
| msgstr "" | ||||
| "Gtk:custom vorming on \"gtk:custom(värvi_nimi,varuvärv)\", \"%s\" ei sobi " | ||||
| "selle vorminguga" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -1435,5 +1512,24 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n" | ||||
|  | ||||
| #~ msgid "Minimize window" | ||||
| #~ msgstr "Akna minimeerimine" | ||||
| #~ msgid "" | ||||
| #~ "Don't make fullscreen windows that are maximized and have no decorations" | ||||
| #~ msgstr "Ei tehta maksimeeritud ilma raamita täisekraanaknaid." | ||||
|  | ||||
| #~ msgid "Whether window popup/frame should be shown when cycling windows." | ||||
| #~ msgstr "Kas hüpikakent/raami näidatakse akende vahetamisel." | ||||
|  | ||||
| #~ msgid "Internal argument for GObject introspection" | ||||
| #~ msgstr "GObject enesevaatluse siseargument" | ||||
|  | ||||
| #~ msgid "Failed to restart: %s\n" | ||||
| #~ msgstr "Tõrge taaskäivitamisel: %s\n" | ||||
|  | ||||
| #~ msgid "Error setting clutter plugin list: %s\n" | ||||
| #~ msgstr "Viga clutteri pluginate nimekirja määramisel: %s\n" | ||||
|  | ||||
| #~ msgid "Clutter Plugins" | ||||
| #~ msgstr "Clutteri pluginad" | ||||
|  | ||||
| #~ msgid "Plugins to load for the Clutter-based compositing manager." | ||||
| #~ msgstr "Clutteril põhineva komposiitmontaažihalduri laadimise pluginad." | ||||
|   | ||||
							
								
								
									
										1274
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										1274
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										27
									
								
								po/ro.po
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								po/ro.po
									
									
									
									
									
								
							| @@ -1944,33 +1944,6 @@ msgstr "" | ||||
| "Expresiile pentru coordonate %d parsate în %g secunde (o medie de %g " | ||||
| "secunde)\n" | ||||
|  | ||||
| #: ../src/50-mutter-launchers.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Launchers" | ||||
| msgstr "Lansatori" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Navigation" | ||||
| msgstr "Navigare" | ||||
|  | ||||
| #: ../src/50-mutter-screenshot.xml.in.h:1 | ||||
| #, fuzzy | ||||
| #| msgid "Take a screenshot" | ||||
| msgid "Screenshots" | ||||
| msgstr "Capturi de ecran" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "System" | ||||
| msgstr "Sistem" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:1 | ||||
| #, fuzzy | ||||
| #| msgid "/_Windows" | ||||
| msgid "Windows" | ||||
| msgstr "Ferestre" | ||||
|  | ||||
| #~ msgid "Window Management" | ||||
| #~ msgstr "Administrare ferestre" | ||||
|  | ||||
|   | ||||
							
								
								
									
										3274
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
							
						
						
									
										3274
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1252
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										1252
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1409
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
							
						
						
									
										1409
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1420
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										1420
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,80 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.desktop.wm.keybindings" | ||||
|                 group="system" | ||||
|                 _name="Navigation" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-1" | ||||
| 	              _description="Move window to workspace 1" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-2" | ||||
| 	              _description="Move window to workspace 2" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-3" | ||||
| 	              _description="Move window to workspace 3" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-4" | ||||
| 	              _description="Move window to workspace 4" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-left" | ||||
| 	              _description="Move window one workspace to the left" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-right" | ||||
| 	              _description="Move window one workspace to the right" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-up" | ||||
| 	              _description="Move window one workspace up" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-down" | ||||
| 	              _description="Move window one workspace down" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-applications" | ||||
| 	              _description="Switch applications"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-windows" | ||||
| 	              _description="Switch windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-group" | ||||
| 	              _description="Switch windows of an application"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-panels" | ||||
| 	              _description="Switch system controls"/> | ||||
|  | ||||
| 	<KeyListEntry name="cycle-windows" | ||||
| 	              _description="Switch windows directly"/> | ||||
|  | ||||
| 	<KeyListEntry name="cycle-group" | ||||
| 	              _description="Switch windows of an app directly"/> | ||||
|  | ||||
| 	<KeyListEntry name="cycle-panels" | ||||
| 	              _description="Switch system controls directly"/> | ||||
|  | ||||
| 	<KeyListEntry name="show-desktop" | ||||
| 	              _description="Hide all normal windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-1" | ||||
| 	              _description="Switch to workspace 1" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-2" | ||||
| 	              _description="Switch to workspace 2" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-3" | ||||
| 	              _description="Switch to workspace 3" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-4" | ||||
| 	              _description="Switch to workspace 4" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-left" | ||||
| 	              _description="Move to workspace left" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-right" | ||||
| 	              _description="Move to workspace right" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-up" | ||||
| 	              _description="Move to workspace above" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-down" | ||||
| 	              _description="Move to workspace below" /> | ||||
|  | ||||
| </KeyListEntries> | ||||
| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.desktop.wm.keybindings" | ||||
|                 group="system" | ||||
|                 _name="System" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="panel-run-dialog" _description="Show the run command prompt"/> | ||||
|  | ||||
| 	<KeyListEntry name="panel-main-menu" _description="Show the activities overview"/> | ||||
|  | ||||
| </KeyListEntries> | ||||
|  | ||||
| @@ -1,50 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.desktop.wm.keybindings" | ||||
|                 group="system" | ||||
|                 _name="Windows" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="activate-window-menu" _description="Activate the window menu"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-fullscreen" _description="Toggle fullscreen mode"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-maximized" _description="Toggle maximization state"/> | ||||
|  | ||||
| 	<KeyListEntry name="maximize" _description="Maximize window"/> | ||||
|  | ||||
| 	<KeyListEntry name="unmaximize" _description="Restore window"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-shaded" _description="Toggle shaded state"/> | ||||
|  | ||||
| 	<KeyListEntry name="close" _description="Close window"/> | ||||
|  | ||||
| 	<KeyListEntry name="minimize" _description="Hide window"/> | ||||
|  | ||||
| 	<KeyListEntry name="begin-move" _description="Move window"/> | ||||
|  | ||||
| 	<KeyListEntry name="begin-resize" _description="Resize window"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-on-all-workspaces" | ||||
| 	              _description="Toggle window on all workspaces or one"/> | ||||
|  | ||||
| 	<KeyListEntry name="raise-or-lower" _description="Raise window if covered, otherwise lower it"/> | ||||
|  | ||||
| 	<KeyListEntry name="raise" _description="Raise window above other windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="lower" _description="Lower window below other windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="maximize-vertically" _description="Maximize window vertically"/> | ||||
|  | ||||
| 	<KeyListEntry name="maximize-horizontally" _description="Maximize window horizontally"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-tiled-left" | ||||
|                       schema="org.gnome.mutter.keybindings" | ||||
|                       _description="View split on left"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-tiled-right" | ||||
|                       schema="org.gnome.mutter.keybindings" | ||||
|                       _description="View split on right"/> | ||||
|  | ||||
| </KeyListEntries> | ||||
|  | ||||
							
								
								
									
										113
									
								
								src/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								src/Makefile.am
									
									
									
									
									
								
							| @@ -6,9 +6,6 @@ lib_LTLIBRARIES = libmutter.la | ||||
| SUBDIRS=wm-tester tools compositor/plugins | ||||
|  | ||||
| INCLUDES=								\ | ||||
| 	-DCLUTTER_ENABLE_EXPERIMENTAL_API				\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_API					\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_2_0_API                              \ | ||||
| 	$(MUTTER_CFLAGS)						\ | ||||
| 	-I$(srcdir)							\ | ||||
| 	-I$(srcdir)/core						\ | ||||
| @@ -30,30 +27,25 @@ INCLUDES=								\ | ||||
| 	-DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" | ||||
|  | ||||
| mutter_built_sources = \ | ||||
| 	mutter-marshal.h \ | ||||
| 	mutter-marshal.c \ | ||||
| 	mutter-enum-types.h \ | ||||
| 	mutter-enum-types.c | ||||
|  | ||||
| libmutter_la_SOURCES =				\ | ||||
| 	core/async-getprop.c			\ | ||||
| 	core/async-getprop.h			\ | ||||
| 	core/barrier.c				\ | ||||
| 	meta/barrier.h				\ | ||||
| 	core/bell.c				\ | ||||
| 	core/bell.h				\ | ||||
| 	core/boxes.c				\ | ||||
| 	core/boxes-private.h			\ | ||||
| 	meta/boxes.h				\ | ||||
| 	compositor/clutter-utils.c		\ | ||||
| 	compositor/clutter-utils.h		\ | ||||
| 	compositor/cogl-utils.c			\ | ||||
| 	compositor/cogl-utils.h			\ | ||||
| 	compositor/compositor.c			\ | ||||
| 	compositor/compositor-private.h		\ | ||||
| 	compositor/meta-background.c		\ | ||||
| 	compositor/meta-background-actor.c	\ | ||||
| 	compositor/meta-background-actor-private.h	\ | ||||
| 	compositor/meta-background-group.c	\ | ||||
| 	compositor/meta-background-group-private.h	\ | ||||
| 	compositor/meta-background-actor.h	\ | ||||
| 	compositor/meta-module.c		\ | ||||
| 	compositor/meta-module.h		\ | ||||
| 	compositor/meta-plugin.c		\ | ||||
| @@ -62,8 +54,7 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/meta-shadow-factory.c	\ | ||||
| 	compositor/meta-shadow-factory-private.h	\ | ||||
| 	compositor/meta-shaped-texture.c	\ | ||||
| 	compositor/meta-texture-rectangle.c	\ | ||||
| 	compositor/meta-texture-rectangle.h	\ | ||||
| 	compositor/meta-shaped-texture.h	\ | ||||
| 	compositor/meta-texture-tower.c		\ | ||||
| 	compositor/meta-texture-tower.h		\ | ||||
| 	compositor/meta-window-actor.c		\ | ||||
| @@ -75,9 +66,6 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/region-utils.c		\ | ||||
| 	compositor/region-utils.h		\ | ||||
| 	meta/compositor.h			\ | ||||
| 	meta/meta-background.h			\ | ||||
| 	meta/meta-background-actor.h		\ | ||||
| 	meta/meta-background-group.h		\ | ||||
| 	meta/meta-plugin.h			\ | ||||
| 	meta/meta-shadow-factory.h		\ | ||||
| 	meta/meta-window-actor.h		\ | ||||
| @@ -87,6 +75,20 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/constraints.h			\ | ||||
| 	core/core.c				\ | ||||
| 	core/delete.c				\ | ||||
| 	core/device.c				\ | ||||
| 	meta/device.h				\ | ||||
| 	core/device-keyboard.c			\ | ||||
| 	core/device-keyboard.h			\ | ||||
| 	core/device-pointer.c			\ | ||||
| 	core/device-pointer.h			\ | ||||
| 	core/device-private.h			\ | ||||
| 	core/device-map.c			\ | ||||
| 	meta/device-map.h			\ | ||||
| 	core/device-map-private.h		\ | ||||
| 	core/device-map-core.c			\ | ||||
| 	core/device-map-core.h			\ | ||||
| 	core/devices-core.c			\ | ||||
| 	core/devices-core.h			\ | ||||
| 	core/display.c				\ | ||||
| 	core/display-private.h			\ | ||||
| 	meta/display.h				\ | ||||
| @@ -96,6 +98,8 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/edge-resistance.h			\ | ||||
| 	core/errors.c				\ | ||||
| 	meta/errors.h				\ | ||||
| 	core/eventqueue.c			\ | ||||
| 	core/eventqueue.h			\ | ||||
| 	core/frame.c				\ | ||||
| 	core/frame.h				\ | ||||
| 	ui/gradient.c				\ | ||||
| @@ -107,6 +111,8 @@ libmutter_la_SOURCES =				\ | ||||
| 	meta/group.h				\ | ||||
| 	core/iconcache.c			\ | ||||
| 	core/iconcache.h			\ | ||||
| 	core/input-events.c			\ | ||||
| 	core/input-events.h			\ | ||||
| 	core/keybindings.c			\ | ||||
| 	core/keybindings-private.h		\ | ||||
| 	core/main.c				\ | ||||
| @@ -140,6 +146,8 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/core.h				\ | ||||
| 	ui/ui.h					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	ui/fixedtip.c				\ | ||||
| 	ui/fixedtip.h				\ | ||||
| 	ui/frames.c				\ | ||||
| 	ui/frames.h				\ | ||||
| 	ui/menu.c				\ | ||||
| @@ -157,32 +165,38 @@ libmutter_la_SOURCES =				\ | ||||
| 	meta/theme.h				\ | ||||
| 	ui/theme-private.h			\ | ||||
| 	ui/ui.c					\ | ||||
| 	core/all-keybindings.h			\ | ||||
| 	meta/preview-widget.h			\ | ||||
| 	ui/preview-widget.c			\ | ||||
| 	$(mutter_built_sources) | ||||
|  | ||||
| if HAVE_XINPUT2 | ||||
| libmutter_la_SOURCES += 			\ | ||||
| 	core/device-map-xi2.c			\ | ||||
| 	core/device-map-xi2.h			\ | ||||
| 	core/devices-xi2.c			\ | ||||
| 	core/devices-xi2.h | ||||
| endif | ||||
|  | ||||
| libmutter_la_LDFLAGS = -no-undefined | ||||
| libmutter_la_LIBADD  = $(MUTTER_LIBS) | ||||
|  | ||||
| # Headers installed for plugins; introspected information will | ||||
| # be extracted into Mutter-<version>.gir | ||||
| libmutterinclude_base_headers =		\ | ||||
| 	meta/barrier.h				\ | ||||
| 	meta/boxes.h				\ | ||||
| 	meta/common.h				\ | ||||
| 	meta/compositor-mutter.h		\ | ||||
| 	meta/compositor.h			\ | ||||
| 	meta/device.h				\ | ||||
| 	meta/device-map.h			\ | ||||
| 	meta/display.h				\ | ||||
| 	meta/errors.h				\ | ||||
| 	meta/gradient.h				\ | ||||
| 	meta/group.h				\ | ||||
| 	meta/keybindings.h			\ | ||||
| 	meta/main.h				\ | ||||
| 	meta/meta-background-actor.h		\ | ||||
| 	meta/meta-background-group.h		\ | ||||
| 	meta/meta-background.h			\ | ||||
| 	meta/meta-plugin.h			\ | ||||
| 	meta/meta-shaped-texture.h		\ | ||||
| 	meta/meta-shadow-factory.h		\ | ||||
| 	meta/meta-window-actor.h		\ | ||||
| 	meta/prefs.h				\ | ||||
| @@ -234,8 +248,8 @@ typelib_DATA = Meta-$(api_version).typelib | ||||
| INTROSPECTION_GIRS = Meta-$(api_version).gir | ||||
|  | ||||
| Meta-$(api_version).gir: libmutter.la | ||||
| @META_GIR@_INCLUDES = GObject-2.0 GDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0 Cogl-1.0 | ||||
| @META_GIR@_EXPORT_PACKAGES = libmutter | ||||
| @META_GIR@_INCLUDES = GObject-2.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0 | ||||
| @META_GIR@_PACKAGES = clutter-1.0 gtk+-3.0 | ||||
| @META_GIR@_CFLAGS = $(INCLUDES) | ||||
| @META_GIR@_LIBS = libmutter.la | ||||
| @META_GIR@_FILES =				\ | ||||
| @@ -270,19 +284,20 @@ wmproperties_in_files=mutter-wm.desktop.in | ||||
| wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop) | ||||
| wmproperties_DATA = $(wmproperties_files) | ||||
|  | ||||
| xmldir       = @GNOME_KEYBINDINGS_KEYSDIR@ | ||||
| xml_in_files = \ | ||||
|         50-mutter-navigation.xml.in	\ | ||||
|         50-mutter-system.xml.in		\ | ||||
|         50-mutter-windows.xml.in | ||||
| xml_DATA     = $(xml_in_files:.xml.in=.xml) | ||||
| schemadir   = $(GCONF_SCHEMA_FILE_DIR) | ||||
| schema_in_files = mutter.schemas.in | ||||
| schema_DATA = $(schema_in_files:.schemas.in=.schemas) | ||||
|  | ||||
| gsettings_SCHEMAS = org.gnome.mutter.gschema.xml | ||||
| @INTLTOOL_XML_NOMERGE_RULE@ | ||||
| @GSETTINGS_RULES@ | ||||
|  | ||||
| convertdir = $(datadir)/GConf/gsettings | ||||
| convert_DATA = mutter-schemas.convert | ||||
| @INTLTOOL_SCHEMAS_RULE@ | ||||
|  | ||||
| if GCONF_SCHEMAS_INSTALL | ||||
| install-data-local: | ||||
| 	GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) | ||||
| else | ||||
| install-data-local: | ||||
| endif | ||||
|  | ||||
| IMAGES=stock_maximize.png stock_minimize.png stock_delete.png | ||||
| VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \ | ||||
| @@ -294,8 +309,7 @@ CLEANFILES =					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	mutter.desktop				\ | ||||
| 	mutter-wm.desktop			\ | ||||
| 	org.gnome.mutter.gschema.xml		\ | ||||
| 	$(xml_DATA)				\ | ||||
| 	mutter.schemas				\ | ||||
| 	$(mutter_built_sources)			\ | ||||
| 	$(typelib_DATA)				\ | ||||
| 	$(gir_DATA) | ||||
| @@ -312,18 +326,37 @@ EXTRA_DIST=$(desktopfiles_files) 	\ | ||||
| 	$(IMAGES) 			\ | ||||
| 	$(desktopfiles_in_files)	\ | ||||
| 	$(wmproperties_in_files)	\ | ||||
| 	$(xml_in_files)			\ | ||||
| 	org.gnome.mutter.gschema.xml.in \ | ||||
| 	mutter-schemas.convert \ | ||||
| 	$(schema_in_files)		\ | ||||
| 	libmutter.pc.in \ | ||||
| 	mutter-plugins.pc.in  \ | ||||
| 	mutter-enum-types.h.in \ | ||||
| 	mutter-enum-types.c.in | ||||
| 	mutter-enum-types.c.in \ | ||||
| 	mutter-marshal.list | ||||
|  | ||||
| BUILT_SOURCES += $(mutter_built_sources) | ||||
| MUTTER_STAMP_FILES = stamp-mutter-enum-types.h | ||||
| MUTTER_STAMP_FILES = stamp-mutter-marshal.h stamp-mutter-enum-types.h | ||||
| CLEANFILES += $(MUTTER_STAMP_FILES) | ||||
|  | ||||
| mutter-marshal.h: stamp-mutter-marshal.h | ||||
| 	@true | ||||
| stamp-mutter-marshal.h: Makefile mutter-marshal.list | ||||
| 	$(AM_V_GEN) $(GLIB_GENMARSHAL) \ | ||||
| 		--prefix=_mutter_marshal \ | ||||
| 		--header \ | ||||
| 	$(srcdir)/mutter-marshal.list > xgen-tmh && \ | ||||
| 	(cmp -s xgen-tmh mutter-marshal.h || cp -f xgen-tmh mutter-marshal.h) && \ | ||||
| 	rm -f xgen-tmh && \ | ||||
| 	echo timestamp > $(@F) | ||||
|  | ||||
| mutter-marshal.c: Makefile mutter-marshal.list | ||||
| 	 $(AM_V_GEN) (echo "#include \"mutter-marshal.h\"" ; \ | ||||
| 	 $(GLIB_GENMARSHAL) \ | ||||
| 		--prefix=_mutter_marshal \ | ||||
| 		--body \ | ||||
| 	 $(srcdir)/mutter-marshal.list ) > xgen-tmc && \ | ||||
| 	cp -f xgen-tmc mutter-marshal.c && \ | ||||
| 	rm -f xgen-tmc | ||||
|  | ||||
| mutter-enum-types.h: stamp-mutter-enum-types.h Makefile | ||||
| 	@true | ||||
| stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.in | ||||
|   | ||||
| @@ -1,120 +0,0 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * Utilities for use with Cogl | ||||
|  * | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * Copyright 2010 Intel Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #include "clutter-utils.h" | ||||
| #include <math.h> | ||||
|  | ||||
| /* This file uses pixel-aligned region computation to determine what | ||||
|  * can be clipped out. This only really works if everything is aligned | ||||
|  * to the pixel grid - not scaled or rotated and at integer offsets. | ||||
|  * | ||||
|  * (This could be relaxed - if we turned off filtering for unscaled | ||||
|  * windows then windows would be, by definition aligned to the pixel | ||||
|  * grid. And for rectangular windows without a shape, the outline that | ||||
|  * we draw for an unrotated window is always a rectangle because we | ||||
|  * don't use antialasing for the window boundary - with or without | ||||
|  * filtering, with or without a scale. But figuring out exactly | ||||
|  * what pixels will be drawn by the graphics system in these cases | ||||
|  * gets tricky, so we just go for the easiest part - no scale, | ||||
|  * and at integer offsets.) | ||||
|  * | ||||
|  * The way we check for pixel-aligned is by looking at the | ||||
|  * transformation into screen space of the allocation box of an actor | ||||
|  * and and checking if the corners are "close enough" to integral | ||||
|  * pixel values. | ||||
|  */ | ||||
|  | ||||
| /* The definition of "close enough" to integral pixel values is | ||||
|  * equality when we convert to 24.8 fixed-point. | ||||
|  */ | ||||
| static inline int | ||||
| round_to_fixed (float x) | ||||
| { | ||||
|   return roundf (x * 256); | ||||
| } | ||||
|  | ||||
| /* This helper function checks if (according to our fixed point precision) | ||||
|  * the vertices @verts form a box of width @widthf and height @heightf | ||||
|  * located at integral coordinates. These coordinates are returned | ||||
|  * in @x_origin and @y_origin. | ||||
|  */ | ||||
| gboolean | ||||
| meta_actor_vertices_are_untransformed (ClutterVertex *verts, | ||||
|                                        float          widthf, | ||||
|                                        float          heightf, | ||||
|                                        int           *x_origin, | ||||
|                                        int           *y_origin) | ||||
| { | ||||
|   int width, height; | ||||
|   int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y; | ||||
|   int x, y; | ||||
|  | ||||
|   width = round_to_fixed (widthf); height = round_to_fixed (heightf); | ||||
|  | ||||
|   v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y); | ||||
|   v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y); | ||||
|   v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y); | ||||
|   v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y); | ||||
|  | ||||
|   /* Using shifting for converting fixed => int, gets things right for | ||||
|    * negative values. / 256. wouldn't do the same | ||||
|    */ | ||||
|   x = v0x >> 8; | ||||
|   y = v0y >> 8; | ||||
|  | ||||
|   /* At integral coordinates? */ | ||||
|   if (x * 256 != v0x || y * 256 != v0y) | ||||
|     return FALSE; | ||||
|  | ||||
|   /* Not scaled? */ | ||||
|   if (v1x - v0x != width || v2y - v0y != height) | ||||
|     return FALSE; | ||||
|  | ||||
|   /* Not rotated/skewed? */ | ||||
|   if (v0x != v2x || v0y != v1y || | ||||
|       v3x != v1x || v3y != v2y) | ||||
|     return FALSE; | ||||
|  | ||||
|   *x_origin = x; | ||||
|   *y_origin = y; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| /* Check if an actor is "untransformed" - which actually means transformed by | ||||
|  * at most a integer-translation. The integer translation, if any, is returned. | ||||
|  */ | ||||
| gboolean | ||||
| meta_actor_is_untransformed (ClutterActor *actor, | ||||
|                              int          *x_origin, | ||||
|                              int          *y_origin) | ||||
| { | ||||
|   gfloat widthf, heightf; | ||||
|   ClutterVertex verts[4]; | ||||
|  | ||||
|   clutter_actor_get_size (actor, &widthf, &heightf); | ||||
|   clutter_actor_get_abs_allocation_vertices (actor, verts); | ||||
|  | ||||
|   return meta_actor_vertices_are_untransformed (verts, widthf, heightf, x_origin, y_origin); | ||||
| } | ||||
|  | ||||
| @@ -21,15 +21,14 @@ | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include "cogl-utils.h" | ||||
|  | ||||
| /** | ||||
|  * meta_create_color_texture_4ub: | ||||
|  * @red: red component | ||||
|  * @green: green component | ||||
|  * @blue: blue component | ||||
|  * @alpha: alpha component | ||||
|  * @red: | ||||
|  * @green: | ||||
|  * @blue: | ||||
|  * @alpha: | ||||
|  * @flags: Optional flags for the texture, or %COGL_TEXTURE_NONE; | ||||
|  *   %COGL_TEXTURE_NO_SLICING is useful if the texture will be | ||||
|  *   repeated to create a constant color fill, since hardware | ||||
| @@ -40,7 +39,7 @@ | ||||
|  * | ||||
|  * Return value: (transfer full): a newly created Cogl texture | ||||
|  */ | ||||
| CoglTexture * | ||||
| CoglHandle | ||||
| meta_create_color_texture_4ub (guint8           red, | ||||
|                                guint8           green, | ||||
|                                guint8           blue, | ||||
| @@ -69,45 +68,43 @@ meta_create_color_texture_4ub (guint8           red, | ||||
| /* Based on gnome-shell/src/st/st-private.c:_st_create_texture_material.c */ | ||||
|  | ||||
| /** | ||||
|  * meta_create_texture_pipeline: | ||||
|  * meta_create_texture_material: | ||||
|  * @src_texture: (allow-none): texture to use initially for the layer | ||||
|  * | ||||
|  * Creates a pipeline with a single layer. Using a common template | ||||
|  * Creates a material with a single layer. Using a common template | ||||
|  * allows sharing a shader for different uses in Mutter. To share the same | ||||
|  * shader with all other pipelines that are just texture plus opacity | ||||
|  * shader with all other materials that are just texture plus opacity | ||||
|  * would require Cogl fixes. | ||||
|  * (See http://bugzilla.clutter-project.org/show_bug.cgi?id=2425) | ||||
|  * | ||||
|  * Return value: (transfer full): a newly created #CoglPipeline | ||||
|  * Return value: (transfer full): a newly created Cogl material | ||||
|  */ | ||||
| CoglPipeline * | ||||
| meta_create_texture_pipeline (CoglTexture *src_texture) | ||||
| CoglHandle | ||||
| meta_create_texture_material (CoglHandle src_texture) | ||||
| { | ||||
|   static CoglPipeline *texture_pipeline_template = NULL; | ||||
|   CoglPipeline *pipeline; | ||||
|   static CoglHandle texture_material_template = COGL_INVALID_HANDLE; | ||||
|   CoglHandle material; | ||||
|  | ||||
|   /* We use a pipeline that has a dummy texture as a base for all | ||||
|      texture pipelines. The idea is that only the Cogl texture object | ||||
|   /* We use a material that has a dummy texture as a base for all | ||||
|      texture materials. The idea is that only the Cogl texture object | ||||
|      would be different in the children so it is likely that Cogl will | ||||
|      be able to share GL programs between all the textures. */ | ||||
|   if (G_UNLIKELY (texture_pipeline_template == NULL)) | ||||
|   if (G_UNLIKELY (texture_material_template == COGL_INVALID_HANDLE)) | ||||
|     { | ||||
|       CoglTexture *dummy_texture; | ||||
|       CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       CoglHandle dummy_texture; | ||||
|  | ||||
|       dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff, | ||||
|                                                      COGL_TEXTURE_NONE); | ||||
|  | ||||
|  | ||||
|       texture_pipeline_template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_texture (texture_pipeline_template, 0, dummy_texture); | ||||
|       cogl_object_unref (dummy_texture); | ||||
|       texture_material_template = cogl_material_new (); | ||||
|       cogl_material_set_layer (texture_material_template, 0, dummy_texture); | ||||
|       cogl_handle_unref (dummy_texture); | ||||
|     } | ||||
|  | ||||
|   pipeline = cogl_pipeline_copy (texture_pipeline_template); | ||||
|   material = cogl_material_copy (texture_material_template); | ||||
|  | ||||
|   if (src_texture != NULL) | ||||
|     cogl_pipeline_set_layer_texture (pipeline, 0, src_texture); | ||||
|   if (src_texture != COGL_INVALID_HANDLE) | ||||
|     cogl_material_set_layer (material, 0, src_texture); | ||||
|  | ||||
|   return pipeline; | ||||
|   return material; | ||||
| } | ||||
|   | ||||
| @@ -25,11 +25,11 @@ | ||||
|  | ||||
| #include <cogl/cogl.h> | ||||
|  | ||||
| CoglTexture * meta_create_color_texture_4ub (guint8           red, | ||||
|                                              guint8           green, | ||||
|                                              guint8           blue, | ||||
|                                              guint8           alpha, | ||||
|                                              CoglTextureFlags flags); | ||||
| CoglPipeline * meta_create_texture_pipeline (CoglTexture *texture); | ||||
| CoglHandle meta_create_color_texture_4ub (guint8           red, | ||||
|                                           guint8           green, | ||||
|                                           guint8           blue, | ||||
|                                           guint8           alpha, | ||||
|                                           CoglTextureFlags flags); | ||||
| CoglHandle meta_create_texture_material  (CoglHandle src_texture); | ||||
|  | ||||
| #endif /* __META_COGL_UTILS_H__ */ | ||||
|   | ||||
| @@ -8,7 +8,6 @@ | ||||
| #include <meta/compositor.h> | ||||
| #include <meta/display.h> | ||||
| #include "meta-plugin-manager.h" | ||||
| #include "meta-window-actor-private.h" | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| typedef struct _MetaCompScreen MetaCompScreen; | ||||
| @@ -18,6 +17,7 @@ struct _MetaCompositor | ||||
|   MetaDisplay    *display; | ||||
|  | ||||
|   Atom            atom_x_root_pixmap; | ||||
|   Atom            atom_x_set_root; | ||||
|   Atom            atom_net_wm_window_opacity; | ||||
|   guint           repaint_func_id; | ||||
|  | ||||
| @@ -25,32 +25,22 @@ struct _MetaCompositor | ||||
|  | ||||
|   MetaPlugin     *modal_plugin; | ||||
|  | ||||
|   gint64          server_time_query_time; | ||||
|   gint64          server_time_offset; | ||||
|  | ||||
|   guint           server_time_is_monotonic_time : 1; | ||||
|   guint           show_redraw : 1; | ||||
|   guint           debug       : 1; | ||||
|   guint           no_mipmaps  : 1; | ||||
|   gboolean        show_redraw : 1; | ||||
|   gboolean        debug       : 1; | ||||
|   gboolean        no_mipmaps  : 1; | ||||
| }; | ||||
|  | ||||
| struct _MetaCompScreen | ||||
| { | ||||
|   MetaScreen            *screen; | ||||
|  | ||||
|   ClutterActor          *stage, *window_group, *top_window_group, *overlay_group; | ||||
|   ClutterActor          *stage, *window_group, *overlay_group; | ||||
|   ClutterActor          *background_actor; | ||||
|   ClutterActor		*hidden_group; | ||||
|   GList                 *windows; | ||||
|   GHashTable            *windows_by_xid; | ||||
|   Window                 output; | ||||
|  | ||||
|   CoglOnscreen          *onscreen; | ||||
|   CoglFrameClosure      *frame_closure; | ||||
|  | ||||
|   /* Used for unredirecting fullscreen windows */ | ||||
|   guint                   disable_unredirect_count; | ||||
|   MetaWindowActor             *unredirected_window; | ||||
|  | ||||
|   /* Before we create the output window */ | ||||
|   XserverRegion     pending_input_region; | ||||
|  | ||||
| @@ -59,10 +49,10 @@ struct _MetaCompScreen | ||||
|   MetaPluginManager *plugin_mgr; | ||||
| }; | ||||
|  | ||||
| /* Wait 2ms after vblank before starting to draw next frame */ | ||||
| #define META_SYNC_DELAY 2 | ||||
|  | ||||
| void meta_switch_workspace_completed (MetaScreen    *screen); | ||||
| void meta_set_stage_input_region     (MetaScreen    *screen, | ||||
|                                       XserverRegion  region); | ||||
| void meta_empty_stage_input_region   (MetaScreen    *screen); | ||||
|  | ||||
| gboolean meta_begin_modal_for_plugin (MetaScreen       *screen, | ||||
|                                       MetaPlugin       *plugin, | ||||
| @@ -74,9 +64,6 @@ void     meta_end_modal_for_plugin   (MetaScreen       *screen, | ||||
|                                       MetaPlugin       *plugin, | ||||
|                                       guint32           timestamp); | ||||
|  | ||||
| gint64 meta_compositor_monotonic_time_to_server_time (MetaDisplay *display, | ||||
|                                                       gint64       monotonic_time); | ||||
|  | ||||
| void meta_check_end_modal (MetaScreen *screen); | ||||
|  | ||||
| #endif /* META_COMPOSITOR_PRIVATE_H */ | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,14 +0,0 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| #ifndef META_BACKGROUND_ACTOR_PRIVATE_H | ||||
| #define META_BACKGROUND_ACTOR_PRIVATE_H | ||||
|  | ||||
| #include <meta/screen.h> | ||||
| #include <meta/meta-background-actor.h> | ||||
|  | ||||
| void meta_background_actor_set_visible_region  (MetaBackgroundActor *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
|  | ||||
| cairo_region_t *meta_background_actor_get_visible_region (MetaBackgroundActor *self); | ||||
|  | ||||
| #endif /* META_BACKGROUND_ACTOR_PRIVATE_H */ | ||||
| @@ -1,5 +1,7 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * meta-background-actor.c: Actor for painting the root window background | ||||
|  * | ||||
|  * Copyright 2009 Sander Dijkhuis | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * | ||||
| @@ -21,34 +23,116 @@ | ||||
|  * Portions adapted from gnome-shell/src/shell-global.c | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-background-actor | ||||
|  * @title: MetaBackgroundActor | ||||
|  * @short_description: Actor for painting the root window background | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #define COGL_ENABLE_EXPERIMENTAL_API | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| #include <X11/Xatom.h> | ||||
|  | ||||
| #include "cogl-utils.h" | ||||
| #include "compositor-private.h" | ||||
| #include <meta/errors.h> | ||||
| #include <meta/meta-background.h> | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-actor.h" | ||||
|  | ||||
| struct _MetaBackgroundActorPrivate | ||||
| struct _MetaBackgroundActorClass | ||||
| { | ||||
|   ClutterActorClass parent_class; | ||||
| }; | ||||
|  | ||||
| struct _MetaBackgroundActor | ||||
| { | ||||
|   ClutterActor parent; | ||||
|  | ||||
|   CoglHandle material; | ||||
|   MetaScreen *screen; | ||||
|   cairo_region_t *visible_region; | ||||
|   float texture_width; | ||||
|   float texture_height; | ||||
|  | ||||
|   guint have_pixmap : 1; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| static void | ||||
| update_wrap_mode (MetaBackgroundActor *self) | ||||
| { | ||||
|   int width, height; | ||||
|   CoglMaterialWrapMode wrap_mode; | ||||
|  | ||||
|   meta_screen_get_size (self->screen, &width, &height); | ||||
|  | ||||
|   /* We turn off repeating when we have a full-screen pixmap to keep from | ||||
|    * getting artifacts from one side of the image sneaking into the other | ||||
|    * side of the image via bilinear filtering. | ||||
|    */ | ||||
|   if (width == self->texture_width && height == self->texture_height) | ||||
|     wrap_mode = COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE; | ||||
|   else | ||||
|     wrap_mode = COGL_MATERIAL_WRAP_MODE_REPEAT; | ||||
|  | ||||
|   cogl_material_set_layer_wrap_mode (self->material, 0, wrap_mode); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_texture (MetaBackgroundActor *self, | ||||
|              CoglHandle           texture) | ||||
| { | ||||
|   MetaDisplay *display; | ||||
|  | ||||
|   display = meta_screen_get_display (self->screen); | ||||
|  | ||||
|   /* This may trigger destruction of an old texture pixmap, which, if | ||||
|    * the underlying X pixmap is already gone has the tendency to trigger | ||||
|    * X errors inside DRI. For safety, trap errors */ | ||||
|   meta_error_trap_push (display); | ||||
|   cogl_material_set_layer (self->material, 0, texture); | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   self->texture_width = cogl_texture_get_width (texture); | ||||
|   self->texture_height = cogl_texture_get_height (texture); | ||||
|  | ||||
|   update_wrap_mode (self); | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (self)); | ||||
| } | ||||
|  | ||||
| /* Sets our material to paint with a 1x1 texture of the stage's background | ||||
|  * color; doing this when we have no pixmap allows the application to turn | ||||
|  * off painting the stage. There might be a performance benefit to | ||||
|  * painting in this case with a solid color, but the normal solid color | ||||
|  * case is a 1x1 root pixmap, so we'd have to reverse-engineer that to | ||||
|  * actually pick up the (small?) performance win. This is just a fallback. | ||||
|  */ | ||||
| static void | ||||
| set_texture_to_stage_color (MetaBackgroundActor *self) | ||||
| { | ||||
|   ClutterActor *stage = meta_get_stage_for_screen (self->screen); | ||||
|   ClutterColor color; | ||||
|   CoglHandle texture; | ||||
|  | ||||
|   clutter_stage_get_color (CLUTTER_STAGE (stage), &color); | ||||
|  | ||||
|   /* Slicing will prevent COGL from using hardware texturing for | ||||
|    * the tiled 1x1 pixmap, and will cause it to draw the window | ||||
|    * background in millions of separate 1x1 rectangles */ | ||||
|   texture = meta_create_color_texture_4ub (color.red, color.green, | ||||
|                                            color.blue, 0xff, | ||||
|                                            COGL_TEXTURE_NO_SLICING); | ||||
|   set_texture (self, texture); | ||||
|   cogl_handle_unref (texture); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_notify_stage_color (GObject             *stage, | ||||
|                        GParamSpec          *pspec, | ||||
|                        MetaBackgroundActor *self) | ||||
| { | ||||
|   if (!self->have_pixmap) | ||||
|     set_texture_to_stage_color (self); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_dispose (GObject *object) | ||||
| { | ||||
| @@ -56,7 +140,20 @@ meta_background_actor_dispose (GObject *object) | ||||
|  | ||||
|   meta_background_actor_set_visible_region (self, NULL); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object); | ||||
|   if (self->material != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (self->material); | ||||
|       self->material = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|  | ||||
|   if (self->screen != NULL) | ||||
|     { | ||||
|       ClutterActor *stage = meta_get_stage_for_screen (self->screen); | ||||
|       g_signal_handlers_disconnect_by_func (stage, | ||||
|                                             (gpointer) on_notify_stage_color, | ||||
|                                             self); | ||||
|       self->screen = NULL; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -65,20 +162,15 @@ meta_background_actor_get_preferred_width (ClutterActor *actor, | ||||
|                                            gfloat       *min_width_p, | ||||
|                                            gfloat       *natural_width_p) | ||||
| { | ||||
|   ClutterContent *content; | ||||
|   gfloat width; | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   int width, height; | ||||
|  | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (content) | ||||
|     clutter_content_get_preferred_size (content, &width, NULL); | ||||
|   else | ||||
|     width = 0; | ||||
|   meta_screen_get_size (self->screen, &width, &height); | ||||
|  | ||||
|   if (min_width_p) | ||||
|     *min_width_p = width; | ||||
|   if (natural_width_p) | ||||
|     *natural_width_p = width; | ||||
|     *natural_width_p = height; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -88,15 +180,10 @@ meta_background_actor_get_preferred_height (ClutterActor *actor, | ||||
|                                             gfloat       *natural_height_p) | ||||
|  | ||||
| { | ||||
|   ClutterContent *content; | ||||
|   gfloat height; | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   int width, height; | ||||
|  | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (content) | ||||
|     clutter_content_get_preferred_size (content, NULL, &height); | ||||
|   else | ||||
|     height = 0; | ||||
|   meta_screen_get_size (self->screen, &width, &height); | ||||
|  | ||||
|   if (min_height_p) | ||||
|     *min_height_p = height; | ||||
| @@ -104,25 +191,64 @@ meta_background_actor_get_preferred_height (ClutterActor *actor, | ||||
|     *natural_height_p = height; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_paint (ClutterActor *actor) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   guchar opacity = clutter_actor_get_paint_opacity (actor); | ||||
|   int width, height; | ||||
|  | ||||
|   meta_screen_get_size (self->screen, &width, &height); | ||||
|  | ||||
|   cogl_material_set_color4ub (self->material, | ||||
|                               opacity, opacity, opacity, opacity); | ||||
|  | ||||
|   cogl_set_source (self->material); | ||||
|  | ||||
|   if (self->visible_region) | ||||
|     { | ||||
|       int n_rectangles = cairo_region_num_rectangles (self->visible_region); | ||||
|       int i; | ||||
|  | ||||
|       for (i = 0; i < n_rectangles; i++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           cairo_region_get_rectangle (self->visible_region, i, &rect); | ||||
|  | ||||
|           cogl_rectangle_with_texture_coords (rect.x, rect.y, | ||||
|                                               rect.x + rect.width, rect.y + rect.height, | ||||
|                                               rect.x / self->texture_width, | ||||
|                                               rect.y / self->texture_height, | ||||
|                                               (rect.x + rect.width) / self->texture_width, | ||||
|                                               (rect.y + rect.height) / self->texture_height); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       cogl_rectangle_with_texture_coords (0.0f, 0.0f, | ||||
|                                           width, height, | ||||
|                                           0.0f, 0.0f, | ||||
|                                           width / self->texture_width, | ||||
|                                           height / self->texture_height); | ||||
|     } | ||||
| } | ||||
|  | ||||
| #if CLUTTER_CHECK_VERSION(1, 5, 2) | ||||
| static gboolean | ||||
| meta_background_actor_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   ClutterContent *content; | ||||
|   gfloat width, height; | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   int width, height; | ||||
|  | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (!content) | ||||
|     return FALSE; | ||||
|  | ||||
|   clutter_content_get_preferred_size (content, &width, &height); | ||||
|   meta_screen_get_size (self->screen, &width, &height); | ||||
|  | ||||
|   clutter_paint_volume_set_width (volume, width); | ||||
|   clutter_paint_volume_set_height (volume, height); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static void | ||||
| meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
| @@ -130,42 +256,124 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate)); | ||||
|  | ||||
|   object_class->dispose = meta_background_actor_dispose; | ||||
|  | ||||
|   actor_class->get_preferred_width = meta_background_actor_get_preferred_width; | ||||
|   actor_class->get_preferred_height = meta_background_actor_get_preferred_height; | ||||
|   actor_class->paint = meta_background_actor_paint; | ||||
| #if CLUTTER_CHECK_VERSION(1, 5, 2) | ||||
|   actor_class->get_paint_volume = meta_background_actor_get_paint_volume; | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_init (MetaBackgroundActor *self) | ||||
| meta_background_actor_init (MetaBackgroundActor *background_actor) | ||||
| { | ||||
|   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                             META_TYPE_BACKGROUND_ACTOR, | ||||
|                                             MetaBackgroundActorPrivate); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @screen: the #MetaScreen | ||||
|  * meta_background_actor_new: | ||||
|  * | ||||
|  * Creates a new actor to draw the background for the given monitor. | ||||
|  * This actor should be associated with a #MetaBackground using | ||||
|  * clutter_actor_set_content() | ||||
|  * Creates a new actor to draw the background for the given screen. | ||||
|  * | ||||
|  * Return value: the newly created background actor | ||||
|  * Return value: (transfer none): the newly created background actor | ||||
|  */ | ||||
| ClutterActor * | ||||
| meta_background_actor_new (void) | ||||
| meta_background_actor_new (MetaScreen *screen) | ||||
| { | ||||
|   MetaBackgroundActor *self; | ||||
|   ClutterActor *stage; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_SCREEN (screen), NULL); | ||||
|  | ||||
|   self = g_object_new (META_TYPE_BACKGROUND_ACTOR, NULL); | ||||
|  | ||||
|   self->screen = screen; | ||||
|  | ||||
|   self->material = meta_create_texture_material (NULL); | ||||
|   cogl_material_set_layer_wrap_mode (self->material, 0, | ||||
|                                      COGL_MATERIAL_WRAP_MODE_REPEAT); | ||||
|  | ||||
|   stage = meta_get_stage_for_screen (self->screen); | ||||
|   g_signal_connect (stage, "notify::color", | ||||
|                     G_CALLBACK (on_notify_stage_color), self); | ||||
|  | ||||
|   meta_background_actor_update (self); | ||||
|  | ||||
|   return CLUTTER_ACTOR (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_update: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * | ||||
|  * Refetches the _XROOTPMAP_ID property for the root window and updates | ||||
|  * the contents of the background actor based on that. There's no attempt | ||||
|  * to optimize out pixmap values that don't change (since a root pixmap | ||||
|  * could be replaced by with another pixmap with the same ID under some | ||||
|  * circumstances), so this should only be called when we actually receive | ||||
|  * a PropertyNotify event for the property. | ||||
|  */ | ||||
| void | ||||
| meta_background_actor_update (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaDisplay *display; | ||||
|   MetaCompositor *compositor; | ||||
|   Atom type; | ||||
|   int format; | ||||
|   gulong nitems; | ||||
|   gulong bytes_after; | ||||
|   guchar *data; | ||||
|   Pixmap root_pixmap_id; | ||||
|  | ||||
|   g_return_if_fail (META_IS_BACKGROUND_ACTOR (self)); | ||||
|  | ||||
|   display = meta_screen_get_display (self->screen); | ||||
|   compositor = meta_display_get_compositor (display); | ||||
|  | ||||
|   root_pixmap_id = None; | ||||
|   if (!XGetWindowProperty (meta_display_get_xdisplay (display), | ||||
|                            meta_screen_get_xroot  (self->screen), | ||||
|                            compositor->atom_x_root_pixmap, | ||||
|                            0, LONG_MAX, | ||||
|                            False, | ||||
|                            AnyPropertyType, | ||||
|                            &type, &format, &nitems, &bytes_after, &data) && | ||||
|       type != None) | ||||
|   { | ||||
|      /* Got a property. */ | ||||
|      if (type == XA_PIXMAP && format == 32 && nitems == 1) | ||||
|        { | ||||
|          /* Was what we expected. */ | ||||
|          root_pixmap_id = *(Pixmap *)data; | ||||
|        } | ||||
|  | ||||
|      XFree(data); | ||||
|   } | ||||
|  | ||||
|   if (root_pixmap_id != None) | ||||
|     { | ||||
|       CoglHandle texture; | ||||
|  | ||||
|       meta_error_trap_push (display); | ||||
|       texture = cogl_texture_pixmap_x11_new (root_pixmap_id, FALSE); | ||||
|       meta_error_trap_pop (display); | ||||
|  | ||||
|       if (texture != COGL_INVALID_HANDLE) | ||||
|         { | ||||
|           set_texture (self, texture); | ||||
|           cogl_handle_unref (texture); | ||||
|  | ||||
|           self->have_pixmap = True; | ||||
|           return; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   self->have_pixmap = False; | ||||
|   set_texture_to_stage_color (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_set_visible_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
| @@ -179,50 +387,37 @@ void | ||||
| meta_background_actor_set_visible_region (MetaBackgroundActor *self, | ||||
|                                           cairo_region_t      *visible_region) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_BACKGROUND_ACTOR (self)); | ||||
|  | ||||
|   priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->visible_region, | ||||
|                    (GDestroyNotify) | ||||
|                    cairo_region_destroy); | ||||
|   if (self->visible_region) | ||||
|     { | ||||
|       cairo_region_destroy (self->visible_region); | ||||
|       self->visible_region = NULL; | ||||
|     } | ||||
|  | ||||
|   if (visible_region) | ||||
|     priv->visible_region = cairo_region_copy (visible_region); | ||||
|     { | ||||
|       cairo_rectangle_int_t screen_rect = { 0 }; | ||||
|       meta_screen_get_size (self->screen, &screen_rect.width, &screen_rect.height); | ||||
|  | ||||
|       /* Doing the intersection here is probably unnecessary - MetaWindowGroup | ||||
|        * should never compute a visible area that's larger than the root screen! | ||||
|        * but it's not that expensive and adds some extra robustness. | ||||
|        */ | ||||
|       self->visible_region = cairo_region_create_rectangle (&screen_rect); | ||||
|       cairo_region_intersect (self->visible_region, visible_region); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_get_visible_region: | ||||
|  * meta_background_actor_screen_size_changed: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * | ||||
|  * Return value (transfer full): a #cairo_region_t that represents the part of | ||||
|  * the background not obscured by other #MetaBackgroundActor or | ||||
|  * #MetaWindowActor objects. | ||||
|  * Called by the compositor when the size of the #MetaScreen changes | ||||
|  */ | ||||
| cairo_region_t * | ||||
| meta_background_actor_get_visible_region (MetaBackgroundActor *self) | ||||
| void | ||||
| meta_background_actor_screen_size_changed (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   ClutterActorBox content_box; | ||||
|   cairo_rectangle_int_t content_area = { 0 }; | ||||
|   cairo_region_t *visible_region; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL); | ||||
|  | ||||
|   if (!priv->visible_region) | ||||
|       return NULL; | ||||
|  | ||||
|   clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box); | ||||
|  | ||||
|   content_area.x = content_box.x1; | ||||
|   content_area.y = content_box.y1; | ||||
|   content_area.width = content_box.x2 - content_box.x1; | ||||
|   content_area.height = content_box.y2 - content_box.y1; | ||||
|  | ||||
|   visible_region = cairo_region_create_rectangle (&content_area); | ||||
|   cairo_region_intersect (visible_region, priv->visible_region); | ||||
|  | ||||
|   return visible_region; | ||||
|   update_wrap_mode (self); | ||||
|   clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
| } | ||||
|   | ||||
| @@ -24,13 +24,9 @@ | ||||
| #define META_BACKGROUND_ACTOR_H | ||||
| 
 | ||||
| #include <clutter/clutter.h> | ||||
| #include <cogl/cogl.h> | ||||
| 
 | ||||
| #include <meta/gradient.h> | ||||
| #include <meta/screen.h> | ||||
| 
 | ||||
| #include <gsettings-desktop-schemas/gdesktop-enums.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * MetaBackgroundActor: | ||||
|  * | ||||
| @@ -50,21 +46,13 @@ typedef struct _MetaBackgroundActor        MetaBackgroundActor; | ||||
| typedef struct _MetaBackgroundActorClass   MetaBackgroundActorClass; | ||||
| typedef struct _MetaBackgroundActorPrivate MetaBackgroundActorPrivate; | ||||
| 
 | ||||
| struct _MetaBackgroundActorClass | ||||
| { | ||||
|   /*< private >*/ | ||||
|   ClutterActorClass parent_class; | ||||
| }; | ||||
| 
 | ||||
| struct _MetaBackgroundActor | ||||
| { | ||||
|   ClutterActor parent; | ||||
| 
 | ||||
|   MetaBackgroundActorPrivate *priv; | ||||
| }; | ||||
| 
 | ||||
| GType meta_background_actor_get_type (void); | ||||
| 
 | ||||
| ClutterActor *meta_background_actor_new (void); | ||||
| ClutterActor *meta_background_actor_new (MetaScreen *screen); | ||||
| 
 | ||||
| void meta_background_actor_update              (MetaBackgroundActor *actor); | ||||
| void meta_background_actor_set_visible_region  (MetaBackgroundActor *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
| void meta_background_actor_screen_size_changed (MetaBackgroundActor *self); | ||||
| 
 | ||||
| #endif /* META_BACKGROUND_ACTOR_H */ | ||||
| @@ -1,11 +0,0 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| #ifndef META_BACKGROUND_GROUP_PRIVATE_H | ||||
| #define META_BACKGROUND_GROUP_PRIVATE_H | ||||
|  | ||||
| #include <meta/screen.h> | ||||
| #include <meta/meta-background-group.h> | ||||
|  | ||||
| void meta_background_group_set_visible_region  (MetaBackgroundGroup *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
| #endif /* META_BACKGROUND_GROUP_PRIVATE_H */ | ||||
| @@ -1,110 +0,0 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-background-group | ||||
|  * @title: MetaBackgroundGroup | ||||
|  * @short_description: Container for background actors | ||||
|  * | ||||
|  * This class is a subclass of ClutterActor with special handling for | ||||
|  * MetaBackgroundActor/MetaBackgroundGroup when painting children. | ||||
|  * It makes sure to only draw the parts of the backgrounds not | ||||
|  * occluded by opaque windows. | ||||
|  * | ||||
|  * See #MetaWindowGroup for more information behind the motivation, | ||||
|  * and details on implementation. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "compositor-private.h" | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-group-private.h" | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| struct _MetaBackgroundGroupPrivate | ||||
| { | ||||
|   gpointer dummy; | ||||
| }; | ||||
|  | ||||
| static void | ||||
| meta_background_group_dispose (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_background_group_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_background_group_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, actor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_group_class_init (MetaBackgroundGroupClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); | ||||
|  | ||||
|   actor_class->get_paint_volume = meta_background_group_get_paint_volume; | ||||
|   object_class->dispose = meta_background_group_dispose; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundGroupPrivate)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_group_init (MetaBackgroundGroup *self) | ||||
| { | ||||
|   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                             META_TYPE_BACKGROUND_GROUP, | ||||
|                                             MetaBackgroundGroupPrivate); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_group_set_visible_region: | ||||
|  * @self: a #MetaBackgroundGroup | ||||
|  * @visible_region: (allow-none): the parts of the background to paint | ||||
|  * | ||||
|  * Sets the area of the backgrounds that is unobscured by overlapping windows. | ||||
|  * This is used to optimize and only paint the visible portions. | ||||
|  */ | ||||
| void | ||||
| meta_background_group_set_visible_region (MetaBackgroundGroup *self, | ||||
|                                           cairo_region_t      *region) | ||||
| { | ||||
|   GList *children, *l; | ||||
|  | ||||
|   children = clutter_actor_get_children (CLUTTER_ACTOR (self)); | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       ClutterActor *actor = l->data; | ||||
|  | ||||
|       if (META_IS_BACKGROUND_ACTOR (actor)) | ||||
|         { | ||||
|           meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (actor), region); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_GROUP (actor)) | ||||
|         { | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (actor, &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           cairo_region_translate (region, -x, -y); | ||||
|           meta_background_group_set_visible_region (META_BACKGROUND_GROUP (actor), region); | ||||
|           cairo_region_translate (region, x, y); | ||||
|         } | ||||
|     } | ||||
|   g_list_free (children); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_background_group_new (void) | ||||
| { | ||||
|   MetaBackgroundGroup *background_group; | ||||
|  | ||||
|   background_group = g_object_new (META_TYPE_BACKGROUND_GROUP, NULL); | ||||
|  | ||||
|   return CLUTTER_ACTOR (background_group); | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -35,32 +35,34 @@ | ||||
|  | ||||
| #include <clutter/x11/clutter-x11.h> | ||||
|  | ||||
| static GType plugin_type = G_TYPE_NONE; | ||||
| static GSList *plugin_types; | ||||
|  | ||||
| /* | ||||
|  * We have one "default plugin manager" that acts for the first screen, | ||||
|  * but also can be used before we open any screens, and additional | ||||
|  * plugin managers for each screen. (This is ugly. Probably we should | ||||
|  * have one plugin manager and only make the plugins per-screen.) | ||||
|  */ | ||||
| static MetaPluginManager *default_plugin_manager; | ||||
|  | ||||
| struct MetaPluginManager | ||||
| { | ||||
|   MetaScreen *screen; | ||||
|   MetaPlugin *plugin; | ||||
|   MetaScreen   *screen; | ||||
|  | ||||
|   GList /* MetaPlugin */ *plugins;  /* TODO -- maybe use hash table */ | ||||
| }; | ||||
|  | ||||
| void | ||||
| meta_plugin_manager_set_plugin_type (GType gtype) | ||||
| { | ||||
|   if (plugin_type != G_TYPE_NONE) | ||||
|     meta_fatal ("Mutter plugin already set: %s", g_type_name (plugin_type)); | ||||
|  | ||||
|   plugin_type = gtype; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Loads the given plugin. | ||||
|  */ | ||||
| void | ||||
| meta_plugin_manager_load (const gchar       *plugin_name) | ||||
| meta_plugin_manager_load (MetaPluginManager *plugin_mgr, | ||||
|                           const gchar       *plugin_name) | ||||
| { | ||||
|   const gchar *dpath = MUTTER_PLUGIN_DIR "/"; | ||||
|   gchar       *path; | ||||
|   MetaModule  *module; | ||||
|   GType        plugin_type; | ||||
|  | ||||
|   if (g_path_is_absolute (plugin_name)) | ||||
|     path = g_strdup (plugin_name); | ||||
| @@ -79,57 +81,162 @@ meta_plugin_manager_load (const gchar       *plugin_name) | ||||
|       exit (1); | ||||
|     } | ||||
|  | ||||
|   meta_plugin_manager_set_plugin_type (meta_module_get_plugin_type (module)); | ||||
|   plugin_type = meta_module_get_plugin_type (module); | ||||
|   meta_plugin_manager_register (plugin_mgr, plugin_type); | ||||
|  | ||||
|   g_type_module_unuse (G_TYPE_MODULE (module)); | ||||
|   g_free (path); | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| /* | ||||
|  * Registers the given plugin type | ||||
|  */ | ||||
| void | ||||
| meta_plugin_manager_register (MetaPluginManager *plugin_mgr, | ||||
|                               GType              plugin_type) | ||||
| { | ||||
|   MetaPlugin  *plugin; | ||||
|  | ||||
|   plugin_types = g_slist_prepend (plugin_types, GSIZE_TO_POINTER (plugin_type)); | ||||
|  | ||||
|   plugin = g_object_new (plugin_type, NULL); | ||||
|   plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   GList *iter; | ||||
|  | ||||
|   if (!plugin_mgr->plugins) | ||||
|     { | ||||
|       /* | ||||
|        * If no plugins are specified, load the default plugin. | ||||
|        */ | ||||
|       meta_plugin_manager_load (plugin_mgr, "default"); | ||||
|     } | ||||
|  | ||||
|   for (iter = plugin_mgr->plugins; iter; iter = iter->next) | ||||
|     { | ||||
|       MetaPlugin *plugin = (MetaPlugin*) iter->data; | ||||
|       MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       g_object_set (plugin, | ||||
|                     "screen", plugin_mgr->screen, | ||||
|                     NULL); | ||||
|  | ||||
|       if (klass->start) | ||||
|         klass->start (plugin); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static MetaPluginManager * | ||||
| meta_plugin_manager_new (MetaScreen *screen) | ||||
| { | ||||
|   MetaPluginManager *plugin_mgr; | ||||
|   MetaPluginClass *klass; | ||||
|   MetaPlugin *plugin; | ||||
|  | ||||
|   plugin_mgr = g_new0 (MetaPluginManager, 1); | ||||
|   plugin_mgr->screen = screen; | ||||
|   plugin_mgr->plugin = plugin = g_object_new (plugin_type, "screen", screen, NULL); | ||||
|  | ||||
|   klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   if (klass->start) | ||||
|     klass->start (plugin); | ||||
|   if (screen) | ||||
|     g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", plugin_mgr); | ||||
|  | ||||
|   return plugin_mgr; | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_get_default (void) | ||||
| { | ||||
|   if (!default_plugin_manager) | ||||
|     { | ||||
|       default_plugin_manager = meta_plugin_manager_new (NULL); | ||||
|     } | ||||
|  | ||||
|   return default_plugin_manager; | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_get (MetaScreen *screen) | ||||
| { | ||||
|   MetaPluginManager *plugin_mgr; | ||||
|  | ||||
|   plugin_mgr = g_object_get_data (G_OBJECT (screen), "meta-plugin-manager"); | ||||
|   if (plugin_mgr) | ||||
|     return plugin_mgr; | ||||
|  | ||||
|   if (!default_plugin_manager) | ||||
|     meta_plugin_manager_get_default (); | ||||
|  | ||||
|   if (!default_plugin_manager->screen) | ||||
|     { | ||||
|       /* The default plugin manager is so far unused, we can recycle it */ | ||||
|       default_plugin_manager->screen = screen; | ||||
|       g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", default_plugin_manager); | ||||
|  | ||||
|       return default_plugin_manager; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       GSList *iter; | ||||
|       GType plugin_type; | ||||
|       MetaPlugin *plugin; | ||||
|  | ||||
|       plugin_mgr = meta_plugin_manager_new (screen); | ||||
|  | ||||
|       for (iter = plugin_types; iter; iter = iter->next) | ||||
|         { | ||||
|           plugin_type = (GType)GPOINTER_TO_SIZE (iter->data); | ||||
|           plugin = g_object_new (plugin_type, "screen", screen,  NULL); | ||||
|           plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); | ||||
|         } | ||||
|  | ||||
|       return plugin_mgr; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_manager_kill_window_effects (MetaPluginManager *plugin_mgr, | ||||
|                                          MetaWindowActor   *actor) | ||||
| { | ||||
|   MetaPlugin        *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|  | ||||
|   if (klass->kill_window_effects) | ||||
|     klass->kill_window_effects (plugin, actor); | ||||
|   while (l) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) | ||||
| 	  && klass->kill_window_effects) | ||||
|         klass->kill_window_effects (plugin, actor); | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_manager_kill_switch_workspace (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   MetaPlugin        *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|  | ||||
|   if (klass->kill_switch_workspace) | ||||
|     klass->kill_switch_workspace (plugin); | ||||
|   while (l) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) | ||||
|           && (meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE) | ||||
| 	  && klass->kill_switch_workspace) | ||||
|         klass->kill_switch_workspace (plugin); | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Public method that the compositor hooks into for events that require | ||||
|  * no additional parameters. | ||||
|  * | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -139,48 +246,60 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr, | ||||
|                                   MetaWindowActor   *actor, | ||||
|                                   unsigned long      event) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   gboolean retval = FALSE; | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   switch (event) | ||||
|   while (l) | ||||
|     { | ||||
|     case META_PLUGIN_MINIMIZE: | ||||
|       if (klass->minimize) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->minimize (plugin, actor); | ||||
|         } | ||||
|       break; | ||||
|     case META_PLUGIN_MAP: | ||||
|       if (klass->map) | ||||
|       if (!meta_plugin_disabled (plugin) && | ||||
|           (meta_plugin_features (plugin) & event)) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|  | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->map (plugin, actor); | ||||
|           switch (event) | ||||
|             { | ||||
|             case META_PLUGIN_MINIMIZE: | ||||
|               if (klass->minimize) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->minimize (plugin, actor); | ||||
|                 } | ||||
|               break; | ||||
|             case META_PLUGIN_MAP: | ||||
|               if (klass->map) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->map (plugin, actor); | ||||
|                 } | ||||
|               break; | ||||
|             case META_PLUGIN_DESTROY: | ||||
|               if (klass->destroy) | ||||
|                 { | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->destroy (plugin, actor); | ||||
|                 } | ||||
|               break; | ||||
|             default: | ||||
|               g_warning ("Incorrect handler called for event %lu", event); | ||||
|             } | ||||
|         } | ||||
|       break; | ||||
|     case META_PLUGIN_DESTROY: | ||||
|       if (klass->destroy) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->destroy (plugin, actor); | ||||
|         } | ||||
|       break; | ||||
|     default: | ||||
|       g_warning ("Incorrect handler called for event %lu", event); | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|  | ||||
|   return retval; | ||||
| @@ -190,7 +309,7 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr, | ||||
|  * The public method that the compositor hooks into for maximize and unmaximize | ||||
|  * events. | ||||
|  * | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -204,44 +323,57 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr, | ||||
|                                     gint               target_width, | ||||
|                                     gint               target_height) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen); | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   gboolean retval = FALSE; | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   switch (event) | ||||
|   while (l) | ||||
|     { | ||||
|     case META_PLUGIN_MAXIMIZE: | ||||
|       if (klass->maximize) | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) && | ||||
|           (meta_plugin_features (plugin) & event)) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|  | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->maximize (plugin, actor, | ||||
|                            target_x, target_y, | ||||
|                            target_width, target_height); | ||||
|         } | ||||
|       break; | ||||
|     case META_PLUGIN_UNMAXIMIZE: | ||||
|       if (klass->unmaximize) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|           switch (event) | ||||
|             { | ||||
|             case META_PLUGIN_MAXIMIZE: | ||||
|               if (klass->maximize) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->unmaximize (plugin, actor, | ||||
|                              target_x, target_y, | ||||
|                              target_width, target_height); | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->maximize (plugin, actor, | ||||
|                                    target_x, target_y, | ||||
|                                    target_width, target_height); | ||||
|                 } | ||||
|               break; | ||||
|             case META_PLUGIN_UNMAXIMIZE: | ||||
|               if (klass->unmaximize) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->unmaximize (plugin, actor, | ||||
|                                      target_x, target_y, | ||||
|                                      target_width, target_height); | ||||
|                 } | ||||
|               break; | ||||
|             default: | ||||
|               g_warning ("Incorrect handler called for event %lu", event); | ||||
|             } | ||||
|         } | ||||
|       break; | ||||
|     default: | ||||
|       g_warning ("Incorrect handler called for event %lu", event); | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|  | ||||
|   return retval; | ||||
| @@ -250,7 +382,7 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr, | ||||
| /* | ||||
|  * The public method that the compositor hooks into for desktop switching. | ||||
|  * | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -261,43 +393,41 @@ meta_plugin_manager_switch_workspace (MetaPluginManager   *plugin_mgr, | ||||
|                                       gint                 to, | ||||
|                                       MetaMotionDirection  direction) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen); | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   gboolean retval = FALSE; | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (klass->switch_workspace) | ||||
|   while (l) | ||||
|     { | ||||
|       retval = TRUE; | ||||
|       meta_plugin_manager_kill_switch_workspace (plugin_mgr); | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       _meta_plugin_effect_started (plugin); | ||||
|       klass->switch_workspace (plugin, from, to, direction); | ||||
|       if (!meta_plugin_disabled (plugin) && | ||||
|           (meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE)) | ||||
|         { | ||||
|           if (klass->switch_workspace) | ||||
|             { | ||||
|               retval = TRUE; | ||||
|               meta_plugin_manager_kill_switch_workspace (plugin_mgr); | ||||
|  | ||||
|               _meta_plugin_effect_started (plugin); | ||||
|               klass->switch_workspace (plugin, from, to, direction); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|  | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_manager_filter_keybinding (MetaPluginManager *plugin_mgr, | ||||
|                                        MetaKeyBinding    *binding) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   if (klass->keybinding_filter) | ||||
|     return klass->keybinding_filter (plugin, binding); | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * The public method that the compositor hooks into for desktop switching. | ||||
|  * | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -306,17 +436,49 @@ gboolean | ||||
| meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr, | ||||
|                                    XEvent            *xev) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   GList *l; | ||||
|   gboolean have_plugin_xevent_func; | ||||
|  | ||||
|   if (!plugin_mgr) | ||||
|     return FALSE; | ||||
|  | ||||
|   l = plugin_mgr->plugins; | ||||
|  | ||||
|   /* We need to make sure that clutter gets certain events, like | ||||
|    * ConfigureNotify on the stage window. If there is a plugin that | ||||
|    * provides an xevent_filter function, then it's the responsibility | ||||
|    * of that plugin to pass events to Clutter. Otherwise, we send the | ||||
|    * event directly to Clutter ourselves. | ||||
|    * | ||||
|    * What happens if there are two plugins with xevent_filter functions | ||||
|    * is undefined; in general, multiple competing plugins are something | ||||
|    * we don't support well or care much about. | ||||
|    * | ||||
|    * FIXME: Really, we should just always handle sending the event to | ||||
|    *  clutter if a plugin doesn't report the event as handled by | ||||
|    *  returning TRUE, but it doesn't seem worth breaking compatibility | ||||
|    *  of the plugin interface right now to achieve this; the way it is | ||||
|    *  now works fine in practice. | ||||
|    */ | ||||
|   if (klass->xevent_filter) | ||||
|     return klass->xevent_filter (plugin, xev); | ||||
|   else | ||||
|   have_plugin_xevent_func = FALSE; | ||||
|  | ||||
|   while (l) | ||||
|     { | ||||
|       MetaPlugin      *plugin = l->data; | ||||
|       MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (klass->xevent_filter) | ||||
|         { | ||||
|           have_plugin_xevent_func = TRUE; | ||||
|           if (klass->xevent_filter (plugin, xev) == TRUE) | ||||
|             return TRUE; | ||||
|         } | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|  | ||||
|   if (!have_plugin_xevent_func) | ||||
|     return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|   | ||||
| @@ -46,9 +46,14 @@ | ||||
|  */ | ||||
| typedef struct MetaPluginManager MetaPluginManager; | ||||
|  | ||||
| MetaPluginManager * meta_plugin_manager_new (MetaScreen *screen); | ||||
| MetaPluginManager * meta_plugin_manager_get         (MetaScreen *screen); | ||||
| MetaPluginManager * meta_plugin_manager_get_default (void); | ||||
|  | ||||
| void     meta_plugin_manager_load         (const gchar       *plugin_name); | ||||
| void     meta_plugin_manager_load         (MetaPluginManager *mgr, | ||||
|                                            const gchar       *plugin_name); | ||||
| void     meta_plugin_manager_register     (MetaPluginManager *mgr, | ||||
|                                            GType              plugin_type); | ||||
| void     meta_plugin_manager_initialize   (MetaPluginManager *mgr); | ||||
|  | ||||
| gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr, | ||||
|                                            MetaWindowActor   *actor, | ||||
| @@ -61,15 +66,16 @@ gboolean meta_plugin_manager_event_maximize    (MetaPluginManager *mgr, | ||||
|                                                 gint               target_y, | ||||
|                                                 gint               target_width, | ||||
|                                                 gint               target_height); | ||||
| void     meta_plugin_manager_update_workspaces (MetaPluginManager *mgr); | ||||
|  | ||||
| void meta_plugin_manager_update_workspace (MetaPluginManager *mgr, | ||||
|                                            MetaWorkspace     *w); | ||||
|  | ||||
| gboolean meta_plugin_manager_switch_workspace (MetaPluginManager   *mgr, | ||||
|                                                gint                 from, | ||||
|                                                gint                 to, | ||||
|                                                MetaMotionDirection  direction); | ||||
|  | ||||
| gboolean meta_plugin_manager_filter_keybinding (MetaPluginManager  *mgr, | ||||
|                                                 MetaKeyBinding     *binding); | ||||
|  | ||||
| gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr, | ||||
|                                             XEvent            *xev); | ||||
|  | ||||
|   | ||||
| @@ -21,13 +21,6 @@ | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-plugin | ||||
|  * @title: MetaPlugin | ||||
|  * @short_description: Entry point for plugins | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include <meta/meta-plugin.h> | ||||
| #include "meta-plugin-manager.h" | ||||
| #include <meta/screen.h> | ||||
| @@ -51,17 +44,74 @@ enum | ||||
| { | ||||
|   PROP_0, | ||||
|   PROP_SCREEN, | ||||
|   PROP_FEATURES, | ||||
|   PROP_DISABLED, | ||||
|   PROP_DEBUG_MODE, | ||||
| }; | ||||
|  | ||||
| struct _MetaPluginPrivate | ||||
| { | ||||
|   MetaScreen   *screen; | ||||
|   gulong        features; | ||||
|  | ||||
|   gint          running; | ||||
|  | ||||
|   gboolean      disabled : 1; | ||||
|   gboolean      debug    : 1; | ||||
| }; | ||||
|  | ||||
| static void | ||||
| meta_plugin_set_features (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate  *priv     = plugin->priv; | ||||
|   MetaPluginClass    *klass    = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   priv->features = 0; | ||||
|  | ||||
|   /* | ||||
|    * Feature flags: identify events that the plugin can handle; a plugin can | ||||
|    * handle one or more events. | ||||
|    */ | ||||
|   if (klass->minimize) | ||||
|     priv->features |= META_PLUGIN_MINIMIZE; | ||||
|  | ||||
|   if (klass->maximize) | ||||
|     priv->features |= META_PLUGIN_MAXIMIZE; | ||||
|  | ||||
|   if (klass->unmaximize) | ||||
|     priv->features |= META_PLUGIN_UNMAXIMIZE; | ||||
|  | ||||
|   if (klass->map) | ||||
|     priv->features |= META_PLUGIN_MAP; | ||||
|  | ||||
|   if (klass->destroy) | ||||
|     priv->features |= META_PLUGIN_DESTROY; | ||||
|  | ||||
|   if (klass->switch_workspace) | ||||
|     priv->features |= META_PLUGIN_SWITCH_WORKSPACE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_constructed (GObject *object) | ||||
| { | ||||
|   meta_plugin_set_features (META_PLUGIN (object)); | ||||
|  | ||||
|   if (G_OBJECT_CLASS (meta_plugin_parent_class)->constructed) | ||||
|       G_OBJECT_CLASS (meta_plugin_parent_class)->constructed (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_dispose (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_plugin_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_finalize (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_set_property (GObject      *object, | ||||
|                           guint         prop_id, | ||||
| @@ -75,6 +125,9 @@ meta_plugin_set_property (GObject      *object, | ||||
|     case PROP_SCREEN: | ||||
|       priv->screen = g_value_get_object (value); | ||||
|       break; | ||||
|     case PROP_DISABLED: | ||||
|       priv->disabled = g_value_get_boolean (value); | ||||
|       break; | ||||
|     case PROP_DEBUG_MODE: | ||||
|       priv->debug = g_value_get_boolean (value); | ||||
|       break; | ||||
| @@ -97,9 +150,15 @@ meta_plugin_get_property (GObject    *object, | ||||
|     case PROP_SCREEN: | ||||
|       g_value_set_object (value, priv->screen); | ||||
|       break; | ||||
|     case PROP_DISABLED: | ||||
|       g_value_set_boolean (value, priv->disabled); | ||||
|       break; | ||||
|     case PROP_DEBUG_MODE: | ||||
|       g_value_set_boolean (value, priv->debug); | ||||
|       break; | ||||
|     case PROP_FEATURES: | ||||
|       g_value_set_ulong (value, priv->features); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
| @@ -112,6 +171,9 @@ meta_plugin_class_init (MetaPluginClass *klass) | ||||
| { | ||||
|   GObjectClass      *gobject_class = G_OBJECT_CLASS (klass); | ||||
|  | ||||
|   gobject_class->constructed     = meta_plugin_constructed; | ||||
|   gobject_class->finalize        = meta_plugin_finalize; | ||||
|   gobject_class->dispose         = meta_plugin_dispose; | ||||
|   gobject_class->set_property    = meta_plugin_set_property; | ||||
|   gobject_class->get_property    = meta_plugin_get_property; | ||||
|  | ||||
| @@ -123,6 +185,22 @@ meta_plugin_class_init (MetaPluginClass *klass) | ||||
|                                                         META_TYPE_SCREEN, | ||||
|                                                         G_PARAM_READWRITE)); | ||||
|  | ||||
|   g_object_class_install_property (gobject_class, | ||||
| 				   PROP_FEATURES, | ||||
| 				   g_param_spec_ulong ("features", | ||||
|                                                        "Features", | ||||
|                                                        "Plugin Features", | ||||
|                                                        0 , G_MAXULONG, 0, | ||||
|                                                        G_PARAM_READABLE)); | ||||
|  | ||||
|   g_object_class_install_property (gobject_class, | ||||
| 				   PROP_DISABLED, | ||||
| 				   g_param_spec_boolean ("disabled", | ||||
|                                                       "Plugin disabled", | ||||
|                                                       "Plugin disabled", | ||||
|                                                       FALSE, | ||||
|                                                       G_PARAM_READWRITE)); | ||||
|  | ||||
|   g_object_class_install_property (gobject_class, | ||||
| 				   PROP_DEBUG_MODE, | ||||
| 				   g_param_spec_boolean ("debug-mode", | ||||
| @@ -142,6 +220,22 @@ meta_plugin_init (MetaPlugin *self) | ||||
|   self->priv = priv = META_PLUGIN_GET_PRIVATE (self); | ||||
| } | ||||
|  | ||||
| gulong | ||||
| meta_plugin_features (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return priv->features; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_disabled (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return priv->disabled; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_running  (MetaPlugin *plugin) | ||||
| { | ||||
| @@ -169,6 +263,38 @@ meta_plugin_get_info (MetaPlugin *plugin) | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_overlay_group (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_overlay_group_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_stage (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_stage_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_window_group (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_window_group_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_background_actor (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_background_actor_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * _meta_plugin_effect_started: | ||||
|  * @plugin: the plugin | ||||
| @@ -189,7 +315,7 @@ meta_plugin_switch_workspace_completed (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   MetaScreen *screen = priv->screen; | ||||
|   MetaScreen *screen = meta_plugin_get_screen (plugin); | ||||
|  | ||||
|   if (priv->running-- < 0) | ||||
|     { | ||||
| @@ -263,6 +389,80 @@ meta_plugin_destroy_completed (MetaPlugin      *plugin, | ||||
|   meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_DESTROY); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_query_screen_size (MetaPlugin *plugin, | ||||
|                                int        *width, | ||||
|                                int        *height) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   meta_screen_get_size (priv->screen, width, height); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_set_stage_reactive (MetaPlugin *plugin, | ||||
|                                 gboolean    reactive) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|   MetaScreen  *screen  = priv->screen; | ||||
|  | ||||
|   if (reactive) | ||||
|     meta_set_stage_input_region (screen, None); | ||||
|   else | ||||
|     meta_empty_stage_input_region (screen); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_set_stage_input_area (MetaPlugin *plugin, | ||||
|                                   gint x, gint y, gint width, gint height) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|   MetaScreen   *screen  = priv->screen; | ||||
|   MetaDisplay  *display = meta_screen_get_display (screen); | ||||
|   Display      *xdpy    = meta_display_get_xdisplay (display); | ||||
|   XRectangle    rect; | ||||
|   XserverRegion region; | ||||
|  | ||||
|   rect.x = x; | ||||
|   rect.y = y; | ||||
|   rect.width = width; | ||||
|   rect.height = height; | ||||
|  | ||||
|   region = XFixesCreateRegion (xdpy, &rect, 1); | ||||
|   meta_set_stage_input_region (screen, region); | ||||
|   XFixesDestroyRegion (xdpy, region); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_set_stage_input_region (MetaPlugin   *plugin, | ||||
|                                     XserverRegion region) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|   MetaScreen  *screen  = priv->screen; | ||||
|  | ||||
|   meta_set_stage_input_region (screen, region); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_get_window_actors: | ||||
|  * @plugin: A #MetaPlugin | ||||
|  * | ||||
|  * This function returns all of the #MetaWindowActor objects referenced by Mutter, including | ||||
|  * override-redirect windows.  The returned list is a snapshot of Mutter's current | ||||
|  * stacking order, with the topmost window last. | ||||
|  * | ||||
|  * The 'restacked' signal of #MetaScreen signals when this value has changed. | ||||
|  * | ||||
|  * Returns: (transfer none) (element-type MetaWindowActor): Windows in stacking order, topmost last | ||||
|  */ | ||||
| GList * | ||||
| meta_plugin_get_window_actors (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_window_actors (priv->screen); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_begin_modal: | ||||
|  * @plugin: a #MetaPlugin | ||||
| @@ -302,7 +502,7 @@ meta_plugin_begin_modal (MetaPlugin       *plugin, | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_end_modal: | ||||
|  * meta_plugin_end_modal | ||||
|  * @plugin: a #MetaPlugin | ||||
|  * @timestamp: the time used for releasing grabs | ||||
|  * | ||||
| @@ -321,6 +521,16 @@ meta_plugin_end_modal (MetaPlugin *plugin, | ||||
|   meta_end_modal_for_plugin (priv->screen, plugin, timestamp); | ||||
| } | ||||
|  | ||||
| Display * | ||||
| meta_plugin_get_xdisplay (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv    = META_PLUGIN (plugin)->priv; | ||||
|   MetaDisplay       *display = meta_screen_get_display (priv->screen); | ||||
|   Display           *xdpy    = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   return xdpy; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_get_screen: | ||||
|  * @plugin: a #MetaPlugin | ||||
| @@ -338,3 +548,19 @@ meta_plugin_get_screen (MetaPlugin *plugin) | ||||
|  | ||||
|   return priv->screen; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_type_register: | ||||
|  * @plugin_type: a #MetaPlugin type | ||||
|  * | ||||
|  * Register @plugin_type as a compositor plugin type to be used. | ||||
|  * You must call this before calling meta_init(). | ||||
|  */ | ||||
| void | ||||
| meta_plugin_type_register (GType plugin_type) | ||||
| { | ||||
|   MetaPluginManager *plugin_manager; | ||||
|  | ||||
|   plugin_manager = meta_plugin_manager_get_default (); | ||||
|   meta_plugin_manager_register (plugin_manager, plugin_type); | ||||
| } | ||||
|   | ||||
| @@ -40,7 +40,7 @@ typedef struct _MetaShadow MetaShadow; | ||||
|  | ||||
| MetaShadow *meta_shadow_ref         (MetaShadow            *shadow); | ||||
| void        meta_shadow_unref       (MetaShadow            *shadow); | ||||
| CoglTexture*meta_shadow_get_texture (MetaShadow            *shadow); | ||||
| CoglHandle  meta_shadow_get_texture (MetaShadow            *shadow); | ||||
| void        meta_shadow_paint       (MetaShadow            *shadow, | ||||
|                                      int                    window_x, | ||||
|                                      int                    window_y, | ||||
|   | ||||
| @@ -1,5 +1,9 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * MetaShadowFactory: | ||||
|  * | ||||
|  * Create and cache shadow textures for abritrary window shapes | ||||
|  * | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
| @@ -17,13 +21,6 @@ | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-shadow-factory | ||||
|  * @title: MetaShadowFactory | ||||
|  * @short_description: Create and cache shadow textures for abritrary window shapes | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
| #include <math.h> | ||||
| #include <string.h> | ||||
| @@ -68,8 +65,8 @@ struct _MetaShadow | ||||
|  | ||||
|   MetaShadowFactory *factory; | ||||
|   MetaShadowCacheKey key; | ||||
|   CoglTexture *texture; | ||||
|   CoglPipeline *pipeline; | ||||
|   CoglHandle texture; | ||||
|   CoglHandle material; | ||||
|  | ||||
|   /* The outer order is the distance the shadow extends outside the window | ||||
|    * shape; the inner border is the unscaled portion inside the window | ||||
| @@ -133,7 +130,7 @@ MetaShadowClassInfo default_shadow_classes[] = { | ||||
|   { "popup-menu",    { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } }, | ||||
|  | ||||
|   { "dropdown-menu", { 1, 10, 0, 1, 128 }, { 1, 10, 0, 1, 128 } }, | ||||
|   { "attached",      { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } } | ||||
|   { "attached",      { 2, 50, 0, 1, 255 }, { 1, 50, 0, 1, 128 } } | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaShadowFactory, meta_shadow_factory, G_TYPE_OBJECT); | ||||
| @@ -178,8 +175,8 @@ meta_shadow_unref (MetaShadow *shadow) | ||||
|         } | ||||
|  | ||||
|       meta_window_shape_unref (shadow->key.shape); | ||||
|       cogl_object_unref (shadow->texture); | ||||
|       cogl_object_unref (shadow->pipeline); | ||||
|       cogl_handle_unref (shadow->texture); | ||||
|       cogl_handle_unref (shadow->material); | ||||
|  | ||||
|       g_slice_free (MetaShadow, shadow); | ||||
|     } | ||||
| @@ -221,10 +218,10 @@ meta_shadow_paint (MetaShadow     *shadow, | ||||
|   int dest_y[4]; | ||||
|   int n_x, n_y; | ||||
|  | ||||
|   cogl_pipeline_set_color4ub (shadow->pipeline, | ||||
|   cogl_material_set_color4ub (shadow->material, | ||||
|                               opacity, opacity, opacity, opacity); | ||||
|  | ||||
|   cogl_set_source (shadow->pipeline); | ||||
|   cogl_set_source (shadow->material); | ||||
|  | ||||
|   if (shadow->scale_width) | ||||
|     { | ||||
| @@ -363,7 +360,7 @@ meta_shadow_paint (MetaShadow     *shadow, | ||||
|  * @window_height: actual height of the region to paint a shadow for | ||||
|  * | ||||
|  * Computes the bounds of the pixels that will be affected by | ||||
|  * meta_shadow_paint() | ||||
|  * meta_shadow_paints() | ||||
|  */ | ||||
| void | ||||
| meta_shadow_get_bounds  (MetaShadow            *shadow, | ||||
| @@ -445,7 +442,8 @@ meta_shadow_factory_class_init (MetaShadowFactoryClass *klass) | ||||
|                   G_TYPE_FROM_CLASS (object_class), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, | ||||
|                   NULL, NULL, NULL, | ||||
|                   NULL, NULL, | ||||
|                   g_cclosure_marshal_VOID__VOID, | ||||
|                   G_TYPE_NONE, 0); | ||||
| } | ||||
|  | ||||
| @@ -804,7 +802,7 @@ make_shadow (MetaShadow     *shadow, | ||||
|   cairo_region_destroy (column_convolve_region); | ||||
|   g_free (buffer); | ||||
|  | ||||
|   shadow->pipeline = meta_create_texture_pipeline (shadow->texture); | ||||
|   shadow->material = meta_create_texture_material (shadow->texture); | ||||
| } | ||||
|  | ||||
| static MetaShadowParams * | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| /* | ||||
|  * shaped texture | ||||
|  * | ||||
|  * An actor to draw a texture clipped to a list of rectangles | ||||
|  * | ||||
|  * Authored By Neil Roberts  <neil@linux.intel.com> | ||||
|  * and Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  * | ||||
|  * Copyright (C) 2008 Intel Corporation | ||||
|  * Copyright (C) 2012 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
| @@ -21,42 +23,39 @@ | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-shaped-texture | ||||
|  * @title: MetaShapedTexture | ||||
|  * @short_description: An actor to draw a masked texture. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include "meta-shaped-texture.h" | ||||
| #include "meta-texture-tower.h" | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include <cogl/cogl.h> | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
| #include <gdk/gdk.h> /* for gdk_rectangle_intersect() */ | ||||
| #include <string.h> | ||||
|  | ||||
| static void meta_shaped_texture_dispose  (GObject    *object); | ||||
| static void meta_shaped_texture_finalize (GObject    *object); | ||||
| static void meta_shaped_texture_notify   (GObject    *object, | ||||
| 					  GParamSpec *pspec); | ||||
|  | ||||
| static void meta_shaped_texture_paint (ClutterActor       *actor); | ||||
| static void meta_shaped_texture_pick  (ClutterActor       *actor, | ||||
| 				       const ClutterColor *color); | ||||
|  | ||||
| static void meta_shaped_texture_get_preferred_width (ClutterActor *self, | ||||
|                                                      gfloat        for_height, | ||||
|                                                      gfloat       *min_width_p, | ||||
|                                                      gfloat       *natural_width_p); | ||||
| static void meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture, | ||||
| 					     int                      x, | ||||
| 					     int                      y, | ||||
| 					     int                      width, | ||||
| 					     int                      height); | ||||
|  | ||||
| static void meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
|                                                       gfloat        for_width, | ||||
|                                                       gfloat       *min_height_p, | ||||
|                                                       gfloat       *natural_height_p); | ||||
|  | ||||
| static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume); | ||||
| static void meta_shaped_texture_dirty_mask (MetaShapedTexture *stex); | ||||
|  | ||||
| #ifdef HAVE_GLX_TEXTURE_PIXMAP | ||||
| G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
|                CLUTTER_TYPE_ACTOR); | ||||
|                CLUTTER_GLX_TYPE_TEXTURE_PIXMAP); | ||||
| #else /* HAVE_GLX_TEXTURE_PIXMAP */ | ||||
| G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
|                CLUTTER_X11_TYPE_TEXTURE_PIXMAP); | ||||
| #endif /* HAVE_GLX_TEXTURE_PIXMAP */ | ||||
|  | ||||
| #define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \ | ||||
|   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \ | ||||
| @@ -65,15 +64,15 @@ G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
| struct _MetaShapedTexturePrivate | ||||
| { | ||||
|   MetaTextureTower *paint_tower; | ||||
|   Pixmap pixmap; | ||||
|   CoglTexturePixmapX11 *texture; | ||||
|   CoglTexture *mask_texture; | ||||
|   CoglPipeline *pipeline; | ||||
|   CoglPipeline *pipeline_unshaped; | ||||
|   CoglHandle mask_texture; | ||||
|   CoglHandle material; | ||||
|   CoglHandle material_unshaped; | ||||
|  | ||||
|   cairo_region_t *clip_region; | ||||
|  | ||||
|   guint tex_width, tex_height; | ||||
|   guint mask_width, mask_height; | ||||
|  | ||||
|   GArray *rectangles; | ||||
|  | ||||
|   guint create_mipmaps : 1; | ||||
| }; | ||||
| @@ -83,14 +82,16 @@ meta_shaped_texture_class_init (MetaShapedTextureClass *klass) | ||||
| { | ||||
|   GObjectClass *gobject_class = (GObjectClass *) klass; | ||||
|   ClutterActorClass *actor_class = (ClutterActorClass *) klass; | ||||
|   ClutterX11TexturePixmapClass *x11_texture_class = (ClutterX11TexturePixmapClass *) klass; | ||||
|  | ||||
|   gobject_class->dispose = meta_shaped_texture_dispose; | ||||
|   gobject_class->finalize = meta_shaped_texture_finalize; | ||||
|   gobject_class->notify = meta_shaped_texture_notify; | ||||
|  | ||||
|   actor_class->get_preferred_width = meta_shaped_texture_get_preferred_width; | ||||
|   actor_class->get_preferred_height = meta_shaped_texture_get_preferred_height; | ||||
|   actor_class->paint = meta_shaped_texture_paint; | ||||
|   actor_class->pick = meta_shaped_texture_pick; | ||||
|   actor_class->get_paint_volume = meta_shaped_texture_get_paint_volume; | ||||
|  | ||||
|   x11_texture_class->update_area = meta_shaped_texture_update_area; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaShapedTexturePrivate)); | ||||
| } | ||||
| @@ -102,9 +103,10 @@ meta_shaped_texture_init (MetaShapedTexture *self) | ||||
|  | ||||
|   priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self); | ||||
|  | ||||
|   priv->rectangles = g_array_new (FALSE, FALSE, sizeof (XRectangle)); | ||||
|  | ||||
|   priv->paint_tower = meta_texture_tower_new (); | ||||
|   priv->texture = NULL; | ||||
|   priv->mask_texture = NULL; | ||||
|   priv->mask_texture = COGL_INVALID_HANDLE; | ||||
|   priv->create_mipmaps = TRUE; | ||||
| } | ||||
|  | ||||
| @@ -118,29 +120,192 @@ meta_shaped_texture_dispose (GObject *object) | ||||
|     meta_texture_tower_free (priv->paint_tower); | ||||
|   priv->paint_tower = NULL; | ||||
|  | ||||
|   g_clear_pointer (&priv->pipeline, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->pipeline_unshaped, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->texture, cogl_object_unref); | ||||
|   meta_shaped_texture_dirty_mask (self); | ||||
|  | ||||
|   if (priv->material != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (priv->material); | ||||
|       priv->material = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|   if (priv->material_unshaped != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (priv->material_unshaped); | ||||
|       priv->material_unshaped = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|  | ||||
|   meta_shaped_texture_set_mask_texture (self, NULL); | ||||
|   meta_shaped_texture_set_clip_region (self, NULL); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_finalize (GObject *object) | ||||
| { | ||||
|   MetaShapedTexture *self = (MetaShapedTexture *) object; | ||||
|   MetaShapedTexturePrivate *priv = self->priv; | ||||
|  | ||||
|   g_array_free (priv->rectangles, TRUE); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_shaped_texture_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_notify (GObject    *object, | ||||
| 			    GParamSpec *pspec) | ||||
| { | ||||
|   if (G_OBJECT_CLASS (meta_shaped_texture_parent_class)->notify) | ||||
|     G_OBJECT_CLASS (meta_shaped_texture_parent_class)->notify (object, pspec); | ||||
|  | ||||
|   /* It seems like we could just do this out of update_area(), but unfortunately, | ||||
|    * clutter_glx_texture_pixmap() doesn't call through the vtable on the | ||||
|    * initial update_area, so we need to look for changes to the texture | ||||
|    * explicitly. | ||||
|    */ | ||||
|   if (strcmp (pspec->name, "cogl-texture") == 0) | ||||
|     { | ||||
|       MetaShapedTexture *stex = (MetaShapedTexture *) object; | ||||
|       MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|       meta_shaped_texture_clear (stex); | ||||
|  | ||||
|       if (priv->create_mipmaps) | ||||
| 	meta_texture_tower_set_base_texture (priv->paint_tower, | ||||
| 					       clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex))); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_dirty_mask (MetaShapedTexture *stex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   if (priv->mask_texture != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       GLuint mask_gl_tex; | ||||
|       GLenum mask_gl_target; | ||||
|  | ||||
|       cogl_texture_get_gl_texture (priv->mask_texture, | ||||
|                                    &mask_gl_tex, &mask_gl_target); | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
|       if (mask_gl_target == GL_TEXTURE_RECTANGLE_ARB) | ||||
|         glDeleteTextures (1, &mask_gl_tex); | ||||
| #endif | ||||
|  | ||||
|       cogl_handle_unref (priv->mask_texture); | ||||
|       priv->mask_texture = COGL_INVALID_HANDLE; | ||||
|  | ||||
|       if (priv->material != COGL_INVALID_HANDLE) | ||||
|         cogl_material_set_layer (priv->material, 1, COGL_INVALID_HANDLE); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_ensure_mask (MetaShapedTexture *stex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   CoglHandle paint_tex; | ||||
|   guint tex_width, tex_height; | ||||
|  | ||||
|   paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)); | ||||
|  | ||||
|   if (paint_tex == COGL_INVALID_HANDLE) | ||||
|     return; | ||||
|  | ||||
|   tex_width = cogl_texture_get_width (paint_tex); | ||||
|   tex_height = cogl_texture_get_height (paint_tex); | ||||
|  | ||||
|   /* If the mask texture we have was created for a different size then | ||||
|      recreate it */ | ||||
|   if (priv->mask_texture != COGL_INVALID_HANDLE | ||||
|       && (priv->mask_width != tex_width || priv->mask_height != tex_height)) | ||||
|     meta_shaped_texture_dirty_mask (stex); | ||||
|  | ||||
|   /* If we don't have a mask texture yet then create one */ | ||||
|   if (priv->mask_texture == COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       guchar *mask_data; | ||||
|       const XRectangle *rect; | ||||
|       GLenum paint_gl_target; | ||||
|  | ||||
|       /* Create data for an empty image */ | ||||
|       mask_data = g_malloc0 (tex_width * tex_height); | ||||
|  | ||||
|       /* Cut out a hole for each rectangle */ | ||||
|       for (rect = (XRectangle *) priv->rectangles->data | ||||
|              + priv->rectangles->len; | ||||
|            rect-- > (XRectangle *) priv->rectangles->data;) | ||||
|         { | ||||
|           gint x1 = rect->x, x2 = x1 + rect->width; | ||||
|           gint y1 = rect->y, y2 = y1 + rect->height; | ||||
|           guchar *p; | ||||
|  | ||||
|           /* Clip the rectangle to the size of the texture */ | ||||
|           x1 = CLAMP (x1, 0, (gint) tex_width - 1); | ||||
|           x2 = CLAMP (x2, x1, (gint) tex_width); | ||||
|           y1 = CLAMP (y1, 0, (gint) tex_height - 1); | ||||
|           y2 = CLAMP (y2, y1, (gint) tex_height); | ||||
|  | ||||
|           /* Fill the rectangle */ | ||||
|           for (p = mask_data + y1 * tex_width + x1; | ||||
|                y1 < y2; | ||||
|                y1++, p += tex_width) | ||||
|             memset (p, 255, x2 - x1); | ||||
|         } | ||||
|  | ||||
|       cogl_texture_get_gl_texture (paint_tex, NULL, &paint_gl_target); | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
|       if (paint_gl_target == GL_TEXTURE_RECTANGLE_ARB) | ||||
|         { | ||||
|           GLuint tex; | ||||
|  | ||||
|           glGenTextures (1, &tex); | ||||
|           glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex); | ||||
|           glPixelStorei (GL_UNPACK_ROW_LENGTH, tex_width); | ||||
|           glPixelStorei (GL_UNPACK_ALIGNMENT, 1); | ||||
|           glPixelStorei (GL_UNPACK_SKIP_ROWS, 0); | ||||
|           glPixelStorei (GL_UNPACK_SKIP_PIXELS, 0); | ||||
|           glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, | ||||
|                         GL_ALPHA, tex_width, tex_height, | ||||
|                         0, GL_ALPHA, GL_UNSIGNED_BYTE, mask_data); | ||||
|  | ||||
|           priv->mask_texture | ||||
|             = cogl_texture_new_from_foreign (tex, | ||||
|                                              GL_TEXTURE_RECTANGLE_ARB, | ||||
|                                              tex_width, tex_height, | ||||
|                                              0, 0, | ||||
|                                              COGL_PIXEL_FORMAT_A_8); | ||||
|         } | ||||
|       else | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|         priv->mask_texture = cogl_texture_new_from_data (tex_width, tex_height, | ||||
|                                                          COGL_TEXTURE_NONE, | ||||
|                                                          COGL_PIXEL_FORMAT_A_8, | ||||
|                                                          COGL_PIXEL_FORMAT_ANY, | ||||
|                                                          tex_width, | ||||
|                                                          mask_data); | ||||
|  | ||||
|       g_free (mask_data); | ||||
|  | ||||
|       priv->mask_width = tex_width; | ||||
|       priv->mask_height = tex_height; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_paint (ClutterActor *actor) | ||||
| { | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   CoglTexture *paint_tex; | ||||
|   CoglHandle paint_tex; | ||||
|   guint tex_width, tex_height; | ||||
|   ClutterActorBox alloc; | ||||
|  | ||||
|   static CoglPipeline *pipeline_template = NULL; | ||||
|   static CoglPipeline *pipeline_unshaped_template = NULL; | ||||
|   static CoglHandle material_template = COGL_INVALID_HANDLE; | ||||
|   static CoglHandle material_unshaped_template = COGL_INVALID_HANDLE; | ||||
|  | ||||
|   CoglPipeline *pipeline; | ||||
|   CoglHandle material; | ||||
|  | ||||
|   if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) | ||||
|     return; | ||||
| @@ -166,62 +331,60 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|   if (priv->create_mipmaps) | ||||
|     paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower); | ||||
|   else | ||||
|     paint_tex = COGL_TEXTURE (priv->texture); | ||||
|     paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)); | ||||
|  | ||||
|   if (paint_tex == NULL) | ||||
|   if (paint_tex == COGL_INVALID_HANDLE) | ||||
|     return; | ||||
|  | ||||
|   tex_width = priv->tex_width; | ||||
|   tex_height = priv->tex_height; | ||||
|   tex_width = cogl_texture_get_width (paint_tex); | ||||
|   tex_height = cogl_texture_get_height (paint_tex); | ||||
|  | ||||
|   if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|     return; | ||||
|  | ||||
|   if (priv->mask_texture == NULL) | ||||
|   if (priv->rectangles->len < 1) | ||||
|     { | ||||
|       /* Use a single-layer texture if we don't have a mask. */ | ||||
|       /* If there are no rectangles use a single-layer texture */ | ||||
|  | ||||
|       if (priv->pipeline_unshaped == NULL) | ||||
|       if (priv->material_unshaped == COGL_INVALID_HANDLE)  | ||||
|         { | ||||
|           if (G_UNLIKELY (pipeline_unshaped_template == NULL)) | ||||
|             { | ||||
|               CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|               pipeline_unshaped_template = cogl_pipeline_new (ctx); | ||||
|             } | ||||
|           if (G_UNLIKELY (material_unshaped_template == COGL_INVALID_HANDLE)) | ||||
|             material_unshaped_template = cogl_material_new (); | ||||
|  | ||||
|           priv->pipeline_unshaped = cogl_pipeline_copy (pipeline_unshaped_template); | ||||
|           priv->material_unshaped = cogl_material_copy (material_unshaped_template); | ||||
|         } | ||||
|         pipeline = priv->pipeline_unshaped; | ||||
|         material = priv->material_unshaped; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (priv->pipeline == NULL) | ||||
|       meta_shaped_texture_ensure_mask (stex); | ||||
|  | ||||
|       if (priv->material == COGL_INVALID_HANDLE) | ||||
| 	{ | ||||
| 	   if (G_UNLIKELY (pipeline_template == NULL)) | ||||
| 	   if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE)) | ||||
| 	    { | ||||
|               CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
| 	      pipeline_template =  cogl_pipeline_new (ctx); | ||||
| 	      cogl_pipeline_set_layer_combine (pipeline_template, 1, | ||||
| 	      material_template =  cogl_material_new (); | ||||
| 	      cogl_material_set_layer_combine (material_template, 1, | ||||
| 					   "RGBA = MODULATE (PREVIOUS, TEXTURE[A])", | ||||
| 					   NULL); | ||||
| 	    } | ||||
| 	  priv->pipeline = cogl_pipeline_copy (pipeline_template); | ||||
| 	  priv->material = cogl_material_copy (material_template); | ||||
| 	} | ||||
|       pipeline = priv->pipeline; | ||||
|       material = priv->material; | ||||
|  | ||||
|       cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture); | ||||
|       cogl_material_set_layer (material, 1, priv->mask_texture); | ||||
|     } | ||||
|  | ||||
|   cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex); | ||||
|   cogl_material_set_layer (material, 0, paint_tex); | ||||
|  | ||||
|   { | ||||
|     CoglColor color; | ||||
|     guchar opacity = clutter_actor_get_paint_opacity (actor); | ||||
|     cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity); | ||||
|     cogl_pipeline_set_color (pipeline, &color); | ||||
|     cogl_material_set_color (material, &color); | ||||
|   } | ||||
|  | ||||
|   cogl_set_source (pipeline); | ||||
|   cogl_set_source (material); | ||||
|  | ||||
|   clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
| @@ -229,7 +392,6 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|     { | ||||
|       int n_rects; | ||||
|       int i; | ||||
|       cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; | ||||
|  | ||||
|       /* Limit to how many separate rectangles we'll draw; beyond this just | ||||
|        * fall back and draw the whole thing */ | ||||
| @@ -247,9 +409,6 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|  | ||||
| 	      cairo_region_get_rectangle (priv->clip_region, i, &rect); | ||||
|  | ||||
| 	      if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect)) | ||||
| 		continue; | ||||
|  | ||||
| 	      x1 = rect.x; | ||||
| 	      y1 = rect.y; | ||||
| 	      x2 = rect.x + rect.width; | ||||
| @@ -285,19 +444,19 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   /* If there is no region then use the regular pick */ | ||||
|   if (priv->mask_texture == NULL) | ||||
|   /* If there are no rectangles then use the regular pick */ | ||||
|   if (priv->rectangles->len < 1) | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class) | ||||
|       ->pick (actor, color); | ||||
|   else if (clutter_actor_should_pick_paint (actor)) | ||||
|     { | ||||
|       CoglTexture *paint_tex; | ||||
|       CoglHandle paint_tex; | ||||
|       ClutterActorBox alloc; | ||||
|       guint tex_width, tex_height; | ||||
|  | ||||
|       paint_tex = COGL_TEXTURE (priv->texture); | ||||
|       paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)); | ||||
|  | ||||
|       if (paint_tex == NULL) | ||||
|       if (paint_tex == COGL_INVALID_HANDLE) | ||||
|         return; | ||||
|  | ||||
|       tex_width = cogl_texture_get_width (paint_tex); | ||||
| @@ -306,6 +465,8 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|       if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|         return; | ||||
|  | ||||
|       meta_shaped_texture_ensure_mask (stex); | ||||
|  | ||||
|       cogl_set_source_color4ub (color->red, color->green, color->blue, | ||||
|                                  color->alpha); | ||||
|  | ||||
| @@ -321,48 +482,19 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_get_preferred_width (ClutterActor *self, | ||||
|                                          gfloat        for_height, | ||||
|                                          gfloat       *min_width_p, | ||||
|                                          gfloat       *natural_width_p) | ||||
| meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture, | ||||
| 				 int                      x, | ||||
| 				 int                      y, | ||||
| 				 int                      width, | ||||
| 				 int                      height) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) texture; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (self)); | ||||
|   CLUTTER_X11_TEXTURE_PIXMAP_CLASS (meta_shaped_texture_parent_class)->update_area (texture, | ||||
|                                                                                       x, y, width, height); | ||||
|  | ||||
|   priv = META_SHAPED_TEXTURE (self)->priv; | ||||
|  | ||||
|   if (min_width_p) | ||||
|     *min_width_p = 0; | ||||
|  | ||||
|   if (natural_width_p) | ||||
|     *natural_width_p = priv->tex_width; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
|                                           gfloat        for_width, | ||||
|                                           gfloat       *min_height_p, | ||||
|                                           gfloat       *natural_height_p) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (self)); | ||||
|  | ||||
|   priv = META_SHAPED_TEXTURE (self)->priv; | ||||
|  | ||||
|   if (min_height_p) | ||||
|     *min_height_p = 0; | ||||
|  | ||||
|   if (natural_height_p) | ||||
|     *natural_height_p = priv->tex_height; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_shaped_texture_get_paint_volume (ClutterActor *self, | ||||
|                                       ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, self); | ||||
|   meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| @@ -387,157 +519,97 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex, | ||||
|  | ||||
|   if (create_mipmaps != priv->create_mipmaps) | ||||
|     { | ||||
|       CoglTexture *base_texture; | ||||
|       CoglHandle base_texture; | ||||
|  | ||||
|       priv->create_mipmaps = create_mipmaps; | ||||
|  | ||||
|       base_texture = create_mipmaps ? | ||||
|         COGL_TEXTURE (priv->texture) : NULL; | ||||
| 	clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)) : COGL_INVALID_HANDLE; | ||||
|  | ||||
|       meta_texture_tower_set_base_texture (priv->paint_tower, base_texture); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, | ||||
|                                       CoglTexture       *mask_texture) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->mask_texture, cogl_object_unref); | ||||
|  | ||||
|   if (mask_texture != NULL) | ||||
|     { | ||||
|       priv->mask_texture = mask_texture; | ||||
|       cogl_object_ref (priv->mask_texture); | ||||
|     } | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
| 				 int                x, | ||||
| 				 int                y, | ||||
| 				 int                width, | ||||
| 				 int                height) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   const cairo_rectangle_int_t clip = { x, y, width, height }; | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture == NULL) | ||||
|     return; | ||||
|  | ||||
|   cogl_texture_pixmap_x11_update_area (priv->texture, | ||||
|                                        x, y, width, height); | ||||
|  | ||||
|   meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); | ||||
|  | ||||
|   clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_cogl_texture (MetaShapedTexture    *stex, | ||||
|                   CoglTexturePixmapX11 *cogl_tex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   guint width, height; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture != NULL) | ||||
|     cogl_object_unref (priv->texture); | ||||
|  | ||||
|   priv->texture = cogl_tex; | ||||
|  | ||||
|   if (priv->pipeline != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline, 0, COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|   if (priv->pipeline_unshaped != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline_unshaped, 0, COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|   if (cogl_tex != NULL) | ||||
|     { | ||||
|       width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex)); | ||||
|       height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|       if (width != priv->tex_width || | ||||
|           height != priv->tex_height) | ||||
|         { | ||||
|           priv->tex_width = width; | ||||
|           priv->tex_height = height; | ||||
|  | ||||
|           clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       /* size changed to 0 going to an inavlid texture */ | ||||
|       priv->tex_width = 0; | ||||
|       priv->tex_height = 0; | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|     } | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_pixmap: | ||||
|  * @stex: The #MetaShapedTexture | ||||
|  * @pixmap: The pixmap you want the stex to assume | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_set_pixmap (MetaShapedTexture *stex, | ||||
|                                 Pixmap             pixmap) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->pixmap == pixmap) | ||||
|     return; | ||||
|  | ||||
|   priv->pixmap = pixmap; | ||||
|  | ||||
|   if (pixmap != None) | ||||
|     { | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL)); | ||||
|     } | ||||
|   else | ||||
|     set_cogl_texture (stex, NULL); | ||||
|  | ||||
|   if (priv->create_mipmaps) | ||||
|     meta_texture_tower_set_base_texture (priv->paint_tower, | ||||
|                                          COGL_TEXTURE (priv->texture)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_get_texture: | ||||
|  * @stex: The #MetaShapedTexture | ||||
| /* This is a workaround for deficiencies in the hack tower: | ||||
|  * | ||||
|  * Returns: (transfer none): the unshaped texture | ||||
|  * When we call clutter_x11_texture_pixmap_set_pixmap(tp, None), | ||||
|  * ClutterX11TexturePixmap knows that it has to get rid of the old texture, but | ||||
|  * clutter_texture_set_cogl_texture(texture, COGL_INVALID_HANDLE) isn't allowed, so | ||||
|  * it grabs the material for the texture and manually sets the texture in it. This means | ||||
|  * that the "cogl-texture" property isn't notified, so we don't find out about it. | ||||
|  * | ||||
|  * And if we keep the CoglX11TexturePixmap around after the X pixmap is freed, then | ||||
|  * we'll trigger X errors when we actually try to free it. | ||||
|  * | ||||
|  * The only correct thing to do here is to change our code to derive | ||||
|  * from ClutterActor and get rid of the inheritance hack tower.  Once | ||||
|  * we want to depend on Clutter-1.4 (which has CoglTexturePixmapX11), | ||||
|  * that will be very easy to do. | ||||
|  */ | ||||
| CoglTexture * | ||||
| meta_shaped_texture_get_texture (MetaShapedTexture *stex) | ||||
| void | ||||
| meta_shaped_texture_clear (MetaShapedTexture *stex) | ||||
| { | ||||
|   g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); | ||||
|   return COGL_TEXTURE (stex->priv->texture); | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   meta_texture_tower_set_base_texture (priv->paint_tower, COGL_INVALID_HANDLE); | ||||
|  | ||||
|   if (priv->material != COGL_INVALID_HANDLE) | ||||
|     cogl_material_set_layer (priv->material, 0, COGL_INVALID_HANDLE); | ||||
|  | ||||
|   if (priv->material_unshaped != COGL_INVALID_HANDLE) | ||||
|     cogl_material_set_layer (priv->material_unshaped, 0, COGL_INVALID_HANDLE); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_clear_rectangles (MetaShapedTexture *stex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   g_array_set_size (priv->rectangles, 0); | ||||
|   meta_shaped_texture_dirty_mask (stex); | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_add_rectangle (MetaShapedTexture *stex, | ||||
| 				   const XRectangle  *rect) | ||||
| { | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   meta_shaped_texture_add_rectangles (stex, 1, rect); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_add_rectangles (MetaShapedTexture *stex, | ||||
| 				    size_t             num_rects, | ||||
| 				    const XRectangle  *rects) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   g_array_append_vals (priv->rectangles, rects, num_rects); | ||||
|  | ||||
|   meta_shaped_texture_dirty_mask (stex); | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_clip_region: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @frame: a #TidyTextureframe | ||||
|  * @clip_region: (transfer full): the region of the texture that | ||||
|  *   is visible and should be painted. | ||||
|  *   is visible and should be painted. OWNERSHIP IS ASSUMED BY | ||||
|  *   THE FUNCTION (for efficiency to avoid a copy.) | ||||
|  * | ||||
|  * Provides a hint to the texture about what areas of the texture | ||||
|  * are not completely obscured and thus need to be painted. This | ||||
| @@ -563,106 +635,5 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
|       priv->clip_region = NULL; | ||||
|     } | ||||
|  | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
|   else | ||||
|     priv->clip_region = NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_get_image: | ||||
|  * @stex: A #MetaShapedTexture | ||||
|  * @clip: A clipping rectangle, to help prevent extra processing. | ||||
|  * In the case that the clipping rectangle is partially or fully | ||||
|  * outside the bounds of the texture, the rectangle will be clipped. | ||||
|  * | ||||
|  * Flattens the two layers of the shaped texture into one ARGB32 | ||||
|  * image by alpha blending the two images, and returns the flattened | ||||
|  * image. | ||||
|  * | ||||
|  * Returns: (transfer full): a new cairo surface to be freed with | ||||
|  * cairo_surface_destroy(). | ||||
|  */ | ||||
| cairo_surface_t * | ||||
| meta_shaped_texture_get_image (MetaShapedTexture     *stex, | ||||
|                                cairo_rectangle_int_t *clip) | ||||
| { | ||||
|   CoglTexture *texture, *mask_texture; | ||||
|   cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 }; | ||||
|   cairo_surface_t *surface; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); | ||||
|  | ||||
|   texture = COGL_TEXTURE (stex->priv->texture); | ||||
|  | ||||
|   if (texture == NULL) | ||||
|     return NULL; | ||||
|  | ||||
|   texture_rect.width = cogl_texture_get_width (texture); | ||||
|   texture_rect.height = cogl_texture_get_height (texture); | ||||
|  | ||||
|   if (clip != NULL) | ||||
|     { | ||||
|       /* GdkRectangle is just a typedef of cairo_rectangle_int_t, | ||||
|        * so we can use the gdk_rectangle_* APIs on these. */ | ||||
|       if (!gdk_rectangle_intersect (&texture_rect, clip, clip)) | ||||
|         return NULL; | ||||
|     } | ||||
|  | ||||
|   if (clip != NULL) | ||||
|     texture = cogl_texture_new_from_sub_texture (texture, | ||||
|                                                  clip->x, | ||||
|                                                  clip->y, | ||||
|                                                  clip->width, | ||||
|                                                  clip->height); | ||||
|  | ||||
|   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, | ||||
|                                         cogl_texture_get_width (texture), | ||||
|                                         cogl_texture_get_height (texture)); | ||||
|  | ||||
|   cogl_texture_get_data (texture, CLUTTER_CAIRO_FORMAT_ARGB32, | ||||
|                          cairo_image_surface_get_stride (surface), | ||||
|                          cairo_image_surface_get_data (surface)); | ||||
|  | ||||
|   cairo_surface_mark_dirty (surface); | ||||
|  | ||||
|   if (clip != NULL) | ||||
|     cogl_object_unref (texture); | ||||
|  | ||||
|   mask_texture = stex->priv->mask_texture; | ||||
|   if (mask_texture != NULL) | ||||
|     { | ||||
|       cairo_t *cr; | ||||
|       cairo_surface_t *mask_surface; | ||||
|  | ||||
|       if (clip != NULL) | ||||
|         mask_texture = cogl_texture_new_from_sub_texture (mask_texture, | ||||
|                                                           clip->x, | ||||
|                                                           clip->y, | ||||
|                                                           clip->width, | ||||
|                                                           clip->height); | ||||
|  | ||||
|       mask_surface = cairo_image_surface_create (CAIRO_FORMAT_A8, | ||||
|                                                  cogl_texture_get_width (mask_texture), | ||||
|                                                  cogl_texture_get_height (mask_texture)); | ||||
|  | ||||
|       cogl_texture_get_data (mask_texture, COGL_PIXEL_FORMAT_A_8, | ||||
|                              cairo_image_surface_get_stride (mask_surface), | ||||
|                              cairo_image_surface_get_data (mask_surface)); | ||||
|  | ||||
|       cairo_surface_mark_dirty (mask_surface); | ||||
|  | ||||
|       cr = cairo_create (surface); | ||||
|       cairo_set_source_surface (cr, mask_surface, 0, 0); | ||||
|       cairo_set_operator (cr, CAIRO_OPERATOR_DEST_IN); | ||||
|       cairo_paint (cr); | ||||
|       cairo_destroy (cr); | ||||
|  | ||||
|       cairo_surface_destroy (mask_surface); | ||||
|  | ||||
|       if (clip != NULL) | ||||
|         cogl_object_unref (mask_texture); | ||||
|     } | ||||
|  | ||||
|   return surface; | ||||
|   priv->clip_region = clip_region; | ||||
| } | ||||
|   | ||||
| @@ -26,8 +26,14 @@ | ||||
| #ifndef __META_SHAPED_TEXTURE_H__ | ||||
| #define __META_SHAPED_TEXTURE_H__ | ||||
| 
 | ||||
| #include <config.h> | ||||
| 
 | ||||
| #include <clutter/clutter.h> | ||||
| #include <X11/Xlib.h> | ||||
| #ifdef HAVE_GLX_TEXTURE_PIXMAP | ||||
| #include <clutter/glx/clutter-glx.h> | ||||
| #else | ||||
| #include <clutter/x11/clutter-x11.h> | ||||
| #endif /* HAVE_GLX_TEXTURE_PIXMAP */ | ||||
| 
 | ||||
| G_BEGIN_DECLS | ||||
| 
 | ||||
| @@ -44,20 +50,20 @@ typedef struct _MetaShapedTexturePrivate MetaShapedTexturePrivate; | ||||
| 
 | ||||
| struct _MetaShapedTextureClass | ||||
| { | ||||
|   /*< private >*/ | ||||
|   ClutterActorClass parent_class; | ||||
| #ifdef HAVE_GLX_TEXTURE_PIXMAP | ||||
|   ClutterGLXTexturePixmapClass parent_class; | ||||
| #else | ||||
|   ClutterX11TexturePixmapClass parent_class; | ||||
| #endif | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * MetaShapedTexture: | ||||
|  * | ||||
|  * The <structname>MetaShapedTexture</structname> structure contains | ||||
|  * only private data and should be accessed using the provided API | ||||
|  */ | ||||
| struct _MetaShapedTexture | ||||
| { | ||||
|   /*< private >*/ | ||||
|   ClutterActor parent; | ||||
| #ifdef HAVE_GLX_TEXTURE_PIXMAP | ||||
|   ClutterGLXTexturePixmap parent; | ||||
| #else | ||||
|   ClutterX11TexturePixmap parent; | ||||
| #endif | ||||
| 
 | ||||
|   MetaShapedTexturePrivate *priv; | ||||
| }; | ||||
| @@ -69,27 +75,20 @@ ClutterActor *meta_shaped_texture_new (void); | ||||
| void meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex, | ||||
| 					     gboolean           create_mipmaps); | ||||
| 
 | ||||
| void meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
|                                       int                x, | ||||
|                                       int                y, | ||||
|                                       int                width, | ||||
|                                       int                height); | ||||
| void meta_shaped_texture_clear (MetaShapedTexture *stex); | ||||
| 
 | ||||
| void meta_shaped_texture_set_pixmap (MetaShapedTexture *stex, | ||||
|                                      Pixmap             pixmap); | ||||
| void meta_shaped_texture_clear_rectangles (MetaShapedTexture *stex); | ||||
| 
 | ||||
| CoglTexture * meta_shaped_texture_get_texture (MetaShapedTexture *stex); | ||||
| 
 | ||||
| void meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, | ||||
|                                            CoglTexture       *mask_texture); | ||||
| void meta_shaped_texture_add_rectangle  (MetaShapedTexture *stex, | ||||
| 					 const XRectangle  *rect); | ||||
| void meta_shaped_texture_add_rectangles (MetaShapedTexture *stex, | ||||
| 					 size_t             num_rects, | ||||
| 					 const XRectangle  *rects); | ||||
| 
 | ||||
| /* Assumes ownership of clip_region */ | ||||
| void meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
| 					  cairo_region_t    *clip_region); | ||||
| 
 | ||||
| cairo_surface_t * meta_shaped_texture_get_image (MetaShapedTexture     *stex, | ||||
|                                                  cairo_rectangle_int_t *clip); | ||||
| 
 | ||||
| G_END_DECLS | ||||
| 
 | ||||
| #endif /* __META_SHAPED_TEXTURE_H__ */ | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user