Compare commits

...

106 Commits
3.0.0 ... 3.1.4

Author SHA1 Message Date
6ff9cae2b1 Bump version to 3.1.4
Update NEWS
2011-07-27 18:02:16 -04:00
d3edcbc11e window: remove redundant condition
This condition is already checked for at this point.
2011-07-27 01:42:25 +01:00
779ef582f1 prefs: Initialize button_layout struct even on pref string corner cases
We were leaving some members of the button_layout struct uninitialized if the
pref string didn't have at least one colon or if it was an empty string ("").

https://bugzilla.gnome.org/show_bug.cgi?id=654539
2011-07-24 01:41:25 +01:00
385887c55b Do not check for clutter-glx-texture-pixmap.h
Nothing uses that header any more.

https://bugzilla.gnome.org/show_bug.cgi?id=655064
2011-07-22 10:49:04 +01:00
f396a7aeb4 Do not use ClutterGLXTexturePixmap
MetaShapedTexture can be a ClutterX11TexturePixmap sub-class, given that
ClutterGLXTexturePixmap is just a shim compatibility layer since Clutter
1.4, and it's been deprecated.

https://bugzilla.gnome.org/show_bug.cgi?id=655064
2011-07-22 10:49:04 +01:00
ffa2310a34 Use Cogl API to check for TfP extension support
Do not use the ClutterGLXTexturePixmap method, since it's been
deprecated and it's just a convenience function around the Cogl
API anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=655064
2011-07-22 10:49:04 +01:00
fccd626604 Use a utility function to create GL_ARB_texture_rectangles
meta-texture-rectangle and meta-shaped-texture both create textures
with GL_TEXTURE_RECTANGLE_ARB as the target using direct GL
calls. This patch moves that code into a shared utility function in a
separate file instead. The function resolves the required GL symbols
dynamically instead of linking to them directly so that if Clutter
eventually stops linking to -lGL mutter will continue to build. The
function also splits the texture creation into a separate texture
creation and data upload stage so that it can use
cogl_texture_set_region to upload the data. That way it can avoid
clobbering the glPixelStore state and it can let Cogl do any necessary
format conversion. The code preserves the old value of the rectangle
texture binding instead of clobbering it because Cogl expects to be
able to cache this value to avoid redundant glBindTexture
calls. Finally, the function uses cogl_object_set_data to
automatically destroy the GL texture when the Cogl texture is
destroyed. This avoids having to have special code to destroy the cogl
texture.

https://bugzilla.gnome.org/show_bug.cgi?id=654569
2011-07-19 11:06:23 +01:00
5237b2aa65 Fix dump_region 2011-07-18 16:49:10 -04:00
b1ae599c39 Updated Norwegian bokmål translation 2011-07-18 14:03:24 +02:00
3f694c7335 MetaTextureTower: Remove workaround for old clutter bug
texture_tower_revalidate_fbo() called cogl_flush() to work around
clutter bug #2110, which has been long fixed.

As we depend on clutter 1.7.x anyway we can just remove that workaround.

https://bugzilla.gnome.org/show_bug.cgi?id=654729
2011-07-16 14:24:31 +02:00
3da2f876bd Use paint volumes unconditionally
As we depend on clutter 1.7.x we no longer need to the 1.5.2
version check for paint volumes so just remove it.

https://bugzilla.gnome.org/show_bug.cgi?id=654730
2011-07-16 14:20:51 +02:00
a6d08fcd71 Updated Hebrew translation. 2011-07-15 10:38:59 +03:00
73d22a273e Updated Slovenian translation 2011-07-14 14:39:02 +02:00
24843f277f Updated Belarusian translation. 2011-07-14 00:23:16 +03:00
4167ef870c meta-window-group: Use clutter_stage_get_redraw_clip_bounds
Clutter now has some API to get the bounds of the current redraw clip
so Mutter no longer needs to make direct GL calls to get the scissor
rect. This should make it more robust against Cogl or Clutter changing
how it does the clipping.

https://bugzilla.gnome.org/show_bug.cgi?id=654551
2011-07-13 16:39:50 +01:00
cd7a968093 util: fix a reentrancy problem with meta_later
Calling meta_later_add() or meta_later_remove() from within a
META_LATER_BEFORE_REDRAW callback ended up being a no-op, because of
how run_repaint_laters() was fiddling with the laters list. (This
resulted in a crash in window.c:idle_calc_repaint(), which assumed it
would only be called when a certain queue was non-empty, but was
getting called anyway because of a failed meta_later_remove() call.)

Fix this by having run_repaint_laters() work on a copy of the laters
list instead, and add refcounting to MetaLater so that removing a
later that run_repaint_laters() hasn't gotten to yet won't cause
problems.

https://bugzilla.gnome.org/show_bug.cgi?id=642957
2011-07-13 10:40:41 -04:00
12f71c9795 Improve handling of <Super>key combinations
When we get a press of the overlay key, and then another key is pressed,
first try to handle the combination as a global keybinding. If that fails,
call XAllowEvents(..., ReplayKeyboard, ...) to let it be handled by
our per-window keybindings or by the application.

This requires restructuring things to call XAllowEvents a bit later
so we can pass the right mode.

https://bugzilla.gnome.org/show_bug.cgi?id=624869
2011-07-13 09:44:33 -04:00
b369c75e1b Updated Latvian translation. 2011-07-13 00:25:16 +03:00
739eade4fa Updated Norwegian bokmål translation 2011-07-12 20:07:18 +02:00
d2b63eaf1f fix a crash-on-exit
meta_frames_destroy() was not safe to be called multiple times, which
was causing a crash on exit due to something else changing somewhere
that makes it get called multiple times.

https://bugzilla.gnome.org/show_bug.cgi?id=654489
2011-07-12 13:53:19 -04:00
47b432bf89 Improve shadow defaults.
- menus have a very subtle shadow, define the outline better. Required for gtk theming.
- focused windows are better identified now as unfocused windows have a subtle shadow.

https://bugzilla.gnome.org/show_bug.cgi?id=649374
2011-07-11 16:00:03 +02:00
b70ccd2a56 Updated Spanish translation 2011-07-10 13:00:04 +02:00
be8df20675 Fix typo when computing shadow bounds
A x/y typo that was causing shadow bounds to be incorrectly
computed and trails to be left in some circumstances. Behavior
noted by Jakub Steiner.

https://bugzilla.gnome.org/show_bug.cgi?id=649374
2011-07-08 22:38:12 -04:00
4a10c95e76 core: Replace lower_beneath_focus_window()
The code assumed that the focus window was always the one at the
top of the window stack, which is not true if an unfocused window
has the above hint set.

Rather than fixing this assumption, rename the function to
lower_beneath_grab_window() and use the display's grab window - the
function is only used for displaying the tile previews, which means
that we want the grab window anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=650661
2011-07-09 01:08:58 +02:00
54b2fab849 theme: Allow using custom colors from the GTK+ theme
Add an additional color type to pick up colors defined with
@define-color in the GTK+ theme's CSS:

  gtk:custom(name,fallback)

(where "name" refers to the name defined in GTK+'s CSS, and fallback
refers to an alternative color spec which is used when the color
referenced by "name" is not found)

The main intent of the change is to allow designers to improve
Adwaita's dark theme variant without having to compromise on colors
which work in the light variant as well.

https://bugzilla.gnome.org/show_bug.cgi?id=648709
2011-07-08 22:40:43 +02:00
8033184134 Fix out-of-tree build.
This patch fixes an issue encountered when building mutter
out-of-tree:

  * When generating mutter-enum-types.[ch], the glib-mkenums command is
    executed from $(srcdir), so it is wrong to prepend $(srcdir) to the
    template file.

https://bugzilla.gnome.org/show_bug.cgi?id=624910
2011-07-08 16:33:12 -04:00
d95da2dfbe theme: Port from GtkStateType to GtkStateFlags
We now use GtkStyleContext exclusively, so it's a bit weird to store
widget state as GtkStateType and translate it always to GtkStateFlags.
Just use GtkStateFlags instead of GtkStateType.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 21:40:55 +02:00
03457029f7 draw-workspace: Update to current GTK style API
Move from GtkStyle to GtkStyleContext.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 21:40:55 +02:00
f8d900c3ea theme: Add helper functions for light/dark colors
GtkStyleContext no longer has dark/light colors GtkStyle used to
have. We already have compatibility code for them in theme.c, so
add two helper functions to make it available outside theme.c.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 21:40:55 +02:00
e16beba111 mutter-window-demo: Port from GdkColor to GdkRGBA
GdkColor is about to be deprecated, so move to GdkRGBA instead.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 21:40:54 +02:00
60ee25d8d5 theme-viewer: Port from GdkColor to GdkRGBA
GdkColor is about to be deprecated, so move to GdkRGBA instead.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 21:40:54 +02:00
ce1369609f theme: Port from GdkColor to GdkRGBA
GdkColor is about to be deprecated, so move to GdkRGBA instead.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 01:29:54 +02:00
8199699e7c gradient: Port from GdkColor to GdkRGBA
GdkColor is about to be deprecated, so move to GdkRGBA instead.
It might be worth considering using cairo patterns for the gradients
rather than using custom code to render gradients to a pixbuf which
is then drawn with cairo, but for now this is just a straight port
of the existing code.

https://bugzilla.gnome.org/show_bug.cgi?id=650586
2011-07-08 01:29:54 +02:00
48cabd1364 window: fix appears-focused propagation with attached grandchildren
When detaching/attaching a dialog, we were only updating
appears-focused on the parent if the child itself was focused, but in
fact, we need to do it if the child has an attached child which is
focused too.

To simplify the case of detaching a focused subtree from its parent,
we change meta_window_propagate_focus_appearance() to use
@window->display->focus_window as the window to add/remove as the
attached_focus_window, and @window only as the starting point to
propagate from. That way we can propagate focus-removal up to
@window's (soon-to-be-ex-)ancestors without having to remove it from
its descendants as well.

https://bugzilla.gnome.org/show_bug.cgi?id=647712
2011-07-07 16:51:36 -04:00
6dc79ce60a reload_transient_for: avoid xtransient_for loops
Don't set a window's xtransient_for if it would create a loop. Since
this is the only place we ever set xtransient_for, we can therefore
assume everywhere else that it does not loop.

https://bugzilla.gnome.org/show_bug.cgi?id=647712
2011-07-07 16:51:36 -04:00
a8cfdc19e2 Added UG translation 2011-07-07 17:12:59 +02:00
db4ae415e3 Updated Galician translations 2011-07-04 22:23:27 +02:00
7842d92995 Updated Slovenian translation 2011-07-02 20:32:15 +02:00
b34c01a95a po/vi: spelling fixes 2011-07-02 13:49:25 +07:00
e4546829e3 Updated Spanish translation 2011-07-02 07:07:44 +02:00
8dc3de87ad Updated Spanish translation 2011-07-02 07:05:16 +02:00
e3094ace05 Updated Japanese translation. 2011-07-02 10:22:29 +09:00
6f49a00bbe Bump version to 3.1.3.1
Update NEWS
2011-07-01 19:26:50 -04:00
b5f277bd7b Freeze api_version to 3.0
Back the API version down to 3.0; since we don't make any stability
guarantees, there's no reason to have a merry-go-round of different
directories and filenames that people have to keep up with.
2011-07-01 19:19:11 -04:00
f798144bea Updated Norwegian bokmål translation 2011-07-02 00:16:49 +02:00
699fb0d0f1 Updated Hebrew translation. 2011-07-01 19:39:11 +03:00
5b84f62a89 Updated Turkish translation 2011-07-01 01:52:44 +03:00
3209e88c6f Bump version to 3.1.3
Update NEWS
2011-06-30 17:03:19 -04:00
0202a0837d Adding missing file to POTFILES.in 2011-06-30 17:03:17 -04:00
2b93c19328 Clip the shaped region to the bounding region
According to the XShape specification, the shaped region should always be
a subset of the bounding region. Certain programs such as wine depended
on this behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=627880
2011-06-30 16:35:13 -04:00
66a830fd46 Fixes for compositor replacement
* When unmanaging a screen, stop redirecting subwindows explicitly,
  so that we do that before destroying the window manager selection
  window.
* Improve comment in the retry code
* When exiting because the previous compositor couldn't be replaced,
  don't g_error() and drop a core file.

https://bugzilla.gnome.org/show_bug.cgi?id=653121
2011-06-30 16:26:10 -04:00
d752096cdf Fix XShape
Commit c3a04bf unintentionally broke XShape handling. By studying the code
extremely carefully, I found this inconsistency with the code that was
there before.

https://bugzilla.gnome.org/show_bug.cgi?id=635268
2011-06-29 16:07:34 -04:00
fe12294b92 Create the 1x1 texture for the root background unsliced
When there was no root background pixmap, we were using a 1x1 repeating
texture as a simple way of drawing a solid color without adding a
second code path. However, when that 1x1 texture was combined into
a larger "atlas texture", hardware repeat couldn't be used, so a
small inefficiency from this approach became an enormous inefficiency
as clutter drew every pixel of the background as a separate rectangle.

https://bugzilla.gnome.org/show_bug.cgi?id=652507
2011-06-29 12:27:02 -04:00
61b5cfece4 Updated Belarusian translation. 2011-06-28 01:36:02 +03:00
ec5fb2a4ad Updated Turkish translation file header 2011-06-26 03:50:55 +03:00
cdabd517fa Updated Turkish translation 2011-06-26 00:27:38 +03:00
ebfe9a0355 Updated Belarusian translation. 2011-06-25 21:55:02 +03:00
c1a5261e2f Updated Serbian translation 2011-06-25 01:01:27 +02:00
c18940a5a2 compositor: Loop and retry to get compositor selection when replacing
There are unavoidable race conditions here when another process is
replacing us.  As a band aid, loop for 5 seconds.

https://bugzilla.gnome.org/show_bug.cgi?id=653121
2011-06-21 15:22:31 -04:00
b533ad2669 core: Remove META_CORE_IS_TITLEBAR_ONSCREEN
The functionality is no longer needed outside of core/, so remove
the getter.

https://bugzilla.gnome.org/show_bug.cgi?id=652369
2011-06-15 21:34:04 +02:00
526bc34bba frames: Always start grab operation on left click
When left-clicking the frame border with the titlebar being
off-screen, rather than starting the expected grab operation the
window menu was popped up.
This behavior is pretty confusing, especially since the menu button
was removed from the default layout, making right-clicking the only
way to get to the window menu.

https://bugzilla.gnome.org/show_bug.cgi?id=652369
2011-06-15 21:34:04 +02:00
35d300b916 Updated Slovenian translation 2011-06-10 20:15:46 +02:00
c70087db0c meta_quit: ignore repeated calls after it's already quitting
meta_run() calls meta_finalize() after the main loop exits, which ends
up calling meta_display_close(), which calls
meta_quit(META_EXIT_SUCCESS), meaning that any exit status passed to
the original meta_quit() call is lost.

Fix this by ignoring meta_quit() calls after the main loop is no
longer running.

https://bugzilla.gnome.org/show_bug.cgi?id=652010
2011-06-06 16:22:39 -04:00
9804841adb Updated Galician translations 2011-06-06 11:23:06 +02:00
aa92aa08bd Updated Galician translations 2011-06-06 11:13:00 +02:00
15e55b2ca1 Updated Hebrew translation. 2011-06-03 11:22:38 +03:00
4257b8deff window: Expose minimized state as property
Track the minimized state in a property, so that we can receive
change notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=651568
2011-05-31 21:20:42 +02:00
e21e2c892a [l10n]Updated Catalan (Valencian) translation 2011-05-29 18:56:56 +02:00
05662b678e Fix crash in meta_display_get_above_tab_keycode
https://bugzilla.gnome.org/show_bug.cgi?id=647777
2011-05-25 14:20:06 -04:00
64f37a3769 window: Add wm-class property and notify it when changed.
https://bugzilla.gnome.org/show_bug.cgi?id=649315
2011-05-25 12:10:03 -04:00
7c9f492584 Updated Spanish translation 2011-05-21 09:32:57 +02:00
7577437167 ui-frames: Delay attaching the style to new frames
Like the setting of new frames' background is delayed until the
frame is associated with its window, delay attaching the initial
style, so that the correct style variant is picked.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
be6775767c core: Update frame style when _GTK_THEME_VARIANT changes
When the _GTK_THEME_VARIANT property changes, rather than just
updating the window's theme_variant property, update its frame
style as well, so that the window decoration reflects the requested
variant. As the initial properties of a window may be read before
its frame is created, there will be cases where the change is not
picked up initially.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
0d9a9b8d3b theme: Do not create temporary GtkStyle objects
In order to pick up colors from a GtkStyleContext, a temporary
GtkStyle object was created from the context and destroyed after
copying the requested GdkColor. This is slightly inefficient, so
get the appropriate GdkRGBA from the context and translate it to
a GdkColor, based on the compatibility code in gtkstyle.c.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
4affd22817 ui-frame: Add support for style variants
Rather than sharing a single style context between all frames, use
a default style and one style per encountered variant (as determined
by the _GTK_THEME_VARIANT property), so that colors from the GTK+ style
are picked from the correct theme variant.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
eb17cd9ba9 ui: Add meta_ui_update_frame_style()
This method allows forcing a style update of a particular frame
from the core, so that it can pick up style variants.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
0cdac78bd5 core: Allow retrieving the theme variant via core_get()
To associate frames with the correct style variant, the UI will
need access to the window's theme variant property.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
4f3b03e13b window: Parse _GTK_THEME_VARIANT property
Since version 3.0, GTK+ has support for style variants. At the moment,
themes may provide a dark variant, which can be requested by
applications via GtkSettings. The requested variant is exported to
X11 via the _GTK_THEME_VARIANT property - support this property, in
order to pick up the correct style variant in the future.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:23 +02:00
da4486b833 theme: Get GTK+ colors from style context
Rather than using a single widget's style for GTK+ colors in themes,
use the style context parameter of the drawing functions for those
colors. Right now, a single style context is shared between frames,
but this will change to support different style variants.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:22 +02:00
37aeb5baf1 frame: Delay updating the background until the frame is ready
To determine the correct background style, the UI needs to access
some frame properties via meta_core_get(); this call will bail out
early if window->frame is unset, so delay the call until the
association is made.

https://bugzilla.gnome.org/show_bug.cgi?id=645355
2011-05-18 23:07:22 +02:00
a2cb38b382 tile-preview: Use gdk_cairo_set_source_rgba()
gdk_cairo_set_source_rgba() is a convenience function which was
added to GTK+-3.0 after the port to GtkStyleContext, so we ended
up using cairo_set_source_rgba() instead. Save a couple of lines ...
2011-05-18 23:07:22 +02:00
c573523c4d Filter mirrored monitors from the monitors list
For the purposes of window placement or arranging window manager or
plugin controls, screens that are just mirrors of other screens should
be ignored, so filter them out of the monitors list.

https://bugzilla.gnome.org/show_bug.cgi?id=649299
2011-05-18 13:00:11 -04:00
64e6b77dc3 window: don't allow side-by-side tiling of non-maximizable windows
If a window is not maximizable, then that probably means it looks dumb
at very large sizes. Even if its hints would allow you to manually
resize it to a large size, don't allow automatically tiling it to half
the screen.

https://bugzilla.gnome.org/show_bug.cgi?id=647901
2011-05-16 10:16:12 -04:00
d0414a3ea6 theme.c: Squash memory leak
When converting a token to a different type, we need to free its
string.

https://bugzilla.gnome.org/show_bug.cgi?id=649500
2011-05-11 14:15:48 -04:00
6596374886 region-utils.c: Squash a memory leak
"chunk" was an allocated but unused variable.

https://bugzilla.gnome.org/show_bug.cgi?id=649504
2011-05-11 14:15:48 -04:00
7d70343c6d Updated Slovenian translation 2011-05-09 20:23:20 +02:00
cb87908dca Updated Hebrew translation. 2011-05-09 00:22:54 +03:00
95f33b36a7 Updated Spanish translation 2011-05-04 19:50:12 +02:00
d246d1c971 Uploaded Ukranian 2011-05-03 22:46:17 +03:00
89dbef9eb3 Fix crash with non-responding application with no title
If a window had no title property set, then the
application-not-responding dialog would cause Mutter to crash
because window->title was NULL; handle that case and use the
string "Application is not responding."

https://bugzilla.gnome.org/show_bug.cgi?id=649114
2011-05-03 11:01:05 -04:00
60dd31ed48 Fix escaping for application-not-responding dialog
We need to escape markup in the title, or a title "<i>Italic</i>"
will be displayed as italic.

https://bugzilla.gnome.org/show_bug.cgi?id=649114
2011-05-03 11:01:05 -04:00
40f51114b5 meta_show_dialog: fix encoding of command line arguments
Command line arguments are supposed to be in the locale encoding,
not UTF-8, and Zenity decodes command line string command line
arguments with this assumption using GOption.

There was a half-hearted attempt to deal with this in delete.c,
but it wasn't correct since it immediately mixed the window title,
converted to the locale encoding with a UTF-8 message.

https://bugzilla.gnome.org/show_bug.cgi?id=649114
2011-05-03 11:01:05 -04:00
d9007a08c9 Don't call textdomain()
As a library, libmutter should not be setting the default translation
domain to point to itself.

Also, move the bindtextdomain() call earlier
(meta_get_option_context), so that translations of command-line
options will be available.

We could call textdomain() in mutter.c, but there's no need to, since
mutter uses dgettext() everywhere anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=649202
2011-05-02 14:37:47 -04:00
3d05405a78 Added UG translation 2011-05-02 18:48:30 +02:00
1ca697a130 Updated Japanese translation. 2011-05-01 13:04:13 +09:00
c248c57b6e Make session saving work a bit better
Previously, the restart command hardcoded "mutter" as the binary name.
This commit changes it to use g_get_prgname() which has a better chance
of being correct (and it does fix session saving for gnome-shell).

Now that mutter is a library, it might be more correct (but also
much higher overhead) to add api for setting these things from
the outside.

https://bugzilla.gnome.org/show_bug.cgi?id=648828
2011-04-29 07:23:30 -04:00
67c3c93b8f Only shadow ARGB windows with a frame outside the frame
An ARGB window with a frame is likely something like a transparent
terminal. It looks awful (and breaks transparency) to draw a big
opaque black shadow under the window, so clip out the region under
the terminal from the shadow we draw.

Add meta_window_get_frame_bounds() to get a cairo region for the
outer bounds of the frame of a window, and modify the frame handling
code to notice changes to the frame shape and discard a cached
region. meta_frames_apply_shapes() is refactored so we can extract
meta_frames_get_frame_bounds() from it.

https://bugzilla.gnome.org/show_bug.cgi?id=635268
2011-04-26 15:10:02 -04:00
c3a04bf394 Convert frame region handling to cairo regions
It's useful to get frame shapes and manipulate them within Mutter, for
example so that the compositor can use them to clip drawing.
For this, we'll need the regions as cairo regions not X regions, so
convert frame shaping code to work in terms of cairo_region_t.

https://bugzilla.gnome.org/show_bug.cgi?id=635268
2011-04-26 15:10:02 -04:00
c30c29b8c3 Make _NET_WM_WINDOW_OPACITY orthogonal to window actor opacity
Using MetaWindowActor.opacity for _NET_WM_WINDOW_OPACITY makes it
difficult to implement effects like fading a window in on map.
Instead, set the opacity on the MetaShadedTexture child and use
it when drawing the shadow.

Since the check MetaWindowGroup does on meta_actor_get_paint_opacity()
no longer covers this, we need to handle the opacity in
meta_window_actor_get_obscured_region() explicitly.

https://bugzilla.gnome.org/show_bug.cgi?id=648613
2011-04-26 15:10:02 -04:00
5eb8aa655b Bump version to 3.0.1
Update NEWS
2011-04-25 17:21:55 -04:00
3543782f39 edge-tiling: Fix cancelling maximize tiling
If a window can not be tiled, e.g. due to its minimum size hints,
dragging away from the top after activating the maximize tile preview
does not cancel the maximization request, the only way to do so is by
hitting Escape.
To fix, reset the tiling state in the maximize-tile code path as
well if necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=646149
2011-04-25 23:12:05 +02:00
4ff4ebebb6 meta_window_is_remote: If WM_CLIENT_MACHINE not set, don't assume remote
Apparently the "fox" toolkit doesn't set WM_CLIENT_MACHINE; while we
could do gymnastics to attempt to figure this out (talk to the X
server?), better to just default to FALSE.

https://bugzilla.gnome.org/show_bug.cgi?id=647662
2011-04-25 16:43:09 -04:00
a3c96c12d6 Updated Turkish translation 2011-04-23 02:08:10 +03:00
eb0e658c99 window: fix a case of appears-focused getting stuck
Since appears-focus only propagates up from modal dialogs, if an
application removed the modal hint from a dialog before destroying it,
then its parent would be left with a stray reference to it in
attached_focus_window, causing it to be permanently appears-focused.

The obvious fix, calling meta_window_propagate_focus_appearance() when
the modal hint is removed, tends to cause noticeable flashing, because
the window will get drawn unfocused and then focused again.

So instead we just change meta_window_propagate_focus_appearance() to
check the window type only when focusing in, not when focusing out.

This would also cause flashing, but in this case we can avoid it by
not notifying the change in appears-focus on the parent window if it
is the expected_focus_window (which it will be by this point). (This
does mean though that if something weird happens and the window
doesn't end up becoming the focus window, it won't get redrawn
unfocused until something else forces it to.)

https://bugzilla.gnome.org/show_bug.cgi?id=647613
2011-04-20 14:40:47 -04:00
4d069650ae Add Esperanto translation 2011-04-19 18:48:55 +02:00
d176755926 Updated Assamese translations 2011-04-05 12:00:38 +05:30
70 changed files with 14114 additions and 11954 deletions

116
NEWS
View File

@ -1,3 +1,119 @@
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
was unintentional [Owen]
Translations:
Yaron Shahrabani [he], Kjartan Maraas [nb], Muhammet Kara [tr]
3.1.3
=====
* Support dark window theme variants for windows with a dark
widget theme; this is selected by the _GTK_THEME_VARIANT
property [Florian, #645355]
* Don't draw a shadow under windows with an alpha-channel - this
fixes transparency for GNOME Terminal [Owen, Jasper; #635268]
* Add a MetaWindow:wm-class property for notification [Jasper; #649315]
* Add a MetaWindow:minimized property for notification [Florian]
* Fix handing of unusual window shapes that Wine was setting
causing some applications to draw wrong [Jasper; #627880]
* Improve replacing another compositor and being replaced:
release compositor selection in the right order and wait for
compositors that get it wrong. [Colin, Owen; #653121]
* Remove behavior where left clicking on a window border with
the titlebar offscreen gave the window menu [Florian; #652369]
* Don't set the global default textdomain, since Mutter is
a library as well as an application [Dan; #649202]
* Exit with the right (success or failure) exit status [Dan]
* Code cleanup [Florian]
* Miscellaneous bug fixes [Owen; #649114, #652507]
Contributors:
Florian Müllner, Jasper St. Pierre, Owen Taylor, Colin Walters, Dan Winship
Translations:
Ihar Hrachyshka [be], Daniel Mustieles [es], Yaron Shahrabani [he],
Carles Ferrando [ca@valencia], Takeshi Aihana [ja], Fran Diéguez [gl],
Matej Urbančič [sl], Miroslav Nikolic [sr], Muhammet Kara [tr],
Daniel Korostil [uk]
3.0.2.1
=======
* When saving the session, use the "program name" rather than
harcoding mutter, fixing session saving for gnome-shell [Matthias]
https://bugzilla.gnome.org/show_bug.cgi?id=648828
Contributors:
Matthias Clasen
3.0.2
=====
* Fix a crash when running without XKB support [Adam]
https://bugzilla.gnome.org/show_bug.cgi?id=647777
* Fix smallish memory leaks [Colin]
https://bugzilla.gnome.org/show_bug.cgi?id=649500
https://bugzilla.gnome.org/show_bug.cgi?id=649504
* Ignore mirrored monitors when listing monitors, fixing
drag-and-drop problems in GNOME Shell [Owen]
https://bugzilla.gnome.org/show_bug.cgi?id=649299
* Don't allow side-by-side tiling of non-maximizable windows
like dialogs and utility windows [Dan]
* Fix interaction of _NET_WM_WINDOW_OPACITY with window effects,
making it work again with GNOME Shell
https://bugzilla.gnome.org/show_bug.cgi?id=648613
Contributors:
Adam Jackson, Colin Walters, Dan Winship
Translations:
Abduxukur Abdurixit [ug]
3.0.1
=====
* If WM_CLIENT_MACHINE isn't set, don't assume a window is remote;
fixes behavior of Fox toolkit applications under GNOME Shell.
https://bugzilla.gnome.org/show_bug.cgi?id=647662 [Colin]
* Fix cases where windows could get stuck drawing as focused after
an attached modal dialog was closed. [Dan]
https://bugzilla.gnome.org/show_bug.cgi?id=647613
* Fix a bug where a window that is too big to be tiled side-by-side
would behave strangely when using the gesture of dragging to
the top to maximize. [Florian]
Contributors:
Florian Müllner, Colin Walters, Dan Winship
Translations:
Amitakhya Phukan [as], Kristjan Schmidt [eo], Muhammet Kara [tr]
3.0.0
=====

View File

@ -1,8 +1,8 @@
AC_PREREQ(2.50)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [0])
m4_define([mutter_micro_version], [0])
m4_define([mutter_minor_version], [1])
m4_define([mutter_micro_version], [4])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@ -185,26 +185,13 @@ else
AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.])
fi
CLUTTER_VERSION=1.2.0
CLUTTER_VERSION=1.7.5
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
@ -215,7 +202,12 @@ GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION])
if test x$found_introspection != xno; then
AC_DEFINE(HAVE_INTROSPECTION, 1, [Define if GObject introspection is available])
MUTTER_PC_MODULES="$MUTTER_PC_MODULES gobject-introspection-1.0"
META_GIR=[Meta_]mutter_major_version[_]mutter_minor_version[_gir]
# Since we don't make any guarantees about stability and we don't support
# parallel install, there's no real reason to change directories, filenames,
# etc. as we change the Mutter tarball version. Note that this must match
# api_version in src/Makefile.am
META_GIR=Meta_3_0_gir
# META_GIR=[Meta_]mutter_major_version[_]mutter_minor_version[_gir]
AC_SUBST(META_GIR)
fi

View File

@ -22,6 +22,18 @@ This document has separate sections for each format version. You may
want to read the document in reverse order, since the base features
are discussed under version 1.
New Features in Theme Format Version 3.4
========================================
An additional color type is added to pick up custom colors defined
in the GTK+ theme's CSS:
gtk:custom(name,fallback)
where <name> refers to a custom color defined with @define-color in
the GTK+ theme, and <fallback> provides an alternative color definition
in case the color referenced by <name> is not found.
New Features in Theme Format Version 3.3
========================================

View File

@ -22,6 +22,7 @@ dz
el
en_CA
en_GB
eo
es
et
eu

View File

@ -1,5 +1,6 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
src/compositor/compositor.c
src/core/all-keybindings.h
src/core/bell.c
src/core/core.c

2175
po/as.po

File diff suppressed because it is too large Load Diff

3984
po/be.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1826
po/eo.po Normal file

File diff suppressed because it is too large Load Diff

296
po/es.po
View File

@ -14,14 +14,25 @@ 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: 2011-03-21 19:31+0000\n"
"PO-Revision-Date: 2011-03-21 20:48+0100\n"
"POT-Creation-Date: 2011-07-08 20:41+0000\n"
"PO-Revision-Date: 2011-07-10 12:59+0200\n"
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\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"
"Content-Transfer-Encoding: 8bits\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:509
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr ""
"Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla "
"«%s»."
#: ../src/core/all-keybindings.h:88
msgid "Switch to workspace 1"
@ -345,13 +356,16 @@ msgstr "Evento de campana"
msgid "Unknown window information request: %d"
msgstr "Petición de información de ventana desconocida: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> no está respondiendo."
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
msgid "Application is not responding."
msgstr "La aplicación no está respondiendo."
#: ../src/core/delete.c:119
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@ -359,11 +373,11 @@ msgstr ""
"Puede elegir esperar un rato para ver si continua o forzar la aplicación "
"para cerrarla completamente."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "_Esperar"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "_Forzar la salida"
@ -434,12 +448,12 @@ msgstr "Inicializar sesión desde el archivo de salvaguarda"
msgid "Make X calls synchronous"
msgstr "Hacer que las llamadas a las X sean síncronas"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Falló al inspeccionar el directorio de temas: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -573,12 +587,12 @@ msgid "Error setting no tab popup status: %s\n"
msgstr ""
"Error al establecer el estado de las pestañas en ventanas emergentes: %s\n"
#: ../src/core/screen.c:623
#: ../src/core/screen.c:663
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
#: ../src/core/screen.c:639
#: ../src/core/screen.c:679
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -587,7 +601,7 @@ msgstr ""
"La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas, intente "
"usar la opción «--replace» para reemplazar el gestor de ventanas activo.\n"
#: ../src/core/screen.c:666
#: ../src/core/screen.c:706
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@ -595,65 +609,65 @@ msgstr ""
"No se ha podido obtener la selección del gestor de ventanas en la ventana %d "
"en la pantalla «%s»\n"
#: ../src/core/screen.c:721
#: ../src/core/screen.c:761
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas\n"
#: ../src/core/screen.c:906
#: ../src/core/screen.c:946
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "No se ha podido liberar el monitor %d en la pantalla «%s»\n"
#: ../src/core/session.c:837 ../src/core/session.c:844
#: ../src/core/session.c:843 ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "No se ha podido crear el directorio «%s»: %s\n"
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "No se ha podido abrir para escritura el archivo de sesión «%s»: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Ocurrió un error al escribir en el archivo de sesión «%s»: %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Ocurrió un error al cerrar el archivo de sesión «%s»: %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Ocurrió un error al interpretar el archivo de sesión guardado: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr ""
"Se ha visto el atributo <mutter_session> pero ya tenemos el ID de la sesión"
#: ../src/core/session.c:1192 ../src/core/session.c:1267
#: ../src/core/session.c:1299 ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Atributo desconocido %s en el elemento <%s>"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "etiqueta <window> anidada"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Elemento desconocido %s"
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@ -699,13 +713,13 @@ msgid "Window manager error: "
msgstr "Error del gestor de ventanas: "
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6752
#: ../src/core/window.c:6903
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -721,7 +735,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7415
#: ../src/core/window.c:7566
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -741,12 +755,18 @@ msgstr "La aplicación establecio un _NET_WM_PID %lu erróneo\n"
msgid "%s (on %s)"
msgstr "%s (on %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1488
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR inválido para la ventana 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1500
#, c-format
#| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR ventana 0x%lx para %s crearía un bucle.\n"
#: ../src/core/xprops.c:155
#, c-format
msgid ""
@ -788,9 +808,6 @@ msgstr ""
"otros escritorios distintos del actual) deberían mantenerse activas."
#: ../src/mutter.schemas.in.h:3
#| msgid ""
#| "Determines whether workspace switching should happen for windows on all "
#| "monitors or only the primary window."
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
@ -839,47 +856,47 @@ msgstr "Áreas de trabajo sólo en el primario"
msgid "Usage: %s\n"
msgstr "Uso: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1280
msgid "Close Window"
msgstr "Cerrar la ventana"
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1283
msgid "Window Menu"
msgstr "Menú de la ventana"
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1286
msgid "Minimize Window"
msgstr "Minimizar la ventana"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1289
msgid "Maximize Window"
msgstr "Maximizar la ventana"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1292
msgid "Restore Window"
msgstr "Restablecer la ventana"
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1295
msgid "Roll Up Window"
msgstr "Enrollar ventana"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1298
msgid "Unroll Window"
msgstr "Desenrollar ventana"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1301
msgid "Keep Window On Top"
msgstr "Mantener la ventana encima"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1304
msgid "Remove Window From Top"
msgstr "Quitar ventana de encima"
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1307
msgid "Always On Visible Workspace"
msgstr "Siempre en el área de trabajo visible"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1310
msgid "Put Window On Only One Workspace"
msgstr "Poner la ventana sólo en un área de trabajo"
@ -1082,49 +1099,83 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:252
msgid "top"
msgstr "superior"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:254
msgid "bottom"
msgstr "inferior"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:256
msgid "left"
msgstr "izquierda"
#: ../src/ui/theme.c:261
#: ../src/ui/theme.c:258
msgid "right"
msgstr "derecha"
#: ../src/ui/theme.c:288
#: ../src/ui/theme.c:285
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "La geometría del marco no especifica la dimensión «%s»"
#: ../src/ui/theme.c:307
#: ../src/ui/theme.c:304
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr ""
"La geometría del marco no especifica la dimensión «%s» para el borde «%s»"
#: ../src/ui/theme.c:344
#: ../src/ui/theme.c:341
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "La proporción del botón %g no es razonable"
#: ../src/ui/theme.c:356
#: ../src/ui/theme.c:353
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "La geometría del marco no especifica el tamaño de los botones"
#: ../src/ui/theme.c:1064
#: ../src/ui/theme.c:1061
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Los degradados deben tener al menos dos colores"
#: ../src/ui/theme.c:1202
#: ../src/ui/theme.c:1206
#, c-format
#| msgid ""
#| "GTK color specification must have a close bracket after the state, e.g. "
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgid ""
"GTK custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr ""
"La especificación de color GTK debe tener un nombre de color y nombre "
"alternativo entre paréntesis, ejemplo: gtk:custom(foo,bar); no se pudo "
"analizar «%s»"
#: ../src/ui/theme.c:1222
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
msgstr ""
"Caracter «%c» no válido en el parámetro «color_name» de «gtk:custom», sólo "
"«A-Za-z0-9-_» son válidos"
#: ../src/ui/theme.c:1236
#, c-format
#| msgid ""
#| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
#| "format"
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
msgstr ""
"El formato de «gtk:custom» es «gtk:custom(nombre_de_color,"
"nombre_alternativo)», «%s» no respeta el formato"
#: ../src/ui/theme.c:1272
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -1134,7 +1185,7 @@ msgstr ""
"ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
"interpretar «%s»"
#: ../src/ui/theme.c:1216
#: ../src/ui/theme.c:1286
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@ -1144,18 +1195,18 @@ msgstr ""
"estado, ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
"interpretar «%s»"
#: ../src/ui/theme.c:1227
#: ../src/ui/theme.c:1297
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "No se entiende el estado «%s» en la especificación del color"
#: ../src/ui/theme.c:1240
#: ../src/ui/theme.c:1310
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr ""
"No se entiende el componente de color «%s» en la especificación del color"
#: ../src/ui/theme.c:1270
#: ../src/ui/theme.c:1340
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -1164,17 +1215,17 @@ msgstr ""
"El formato de blend es «blend/bg_color/fg_color/alfa», «%s» no cumple con el "
"formato"
#: ../src/ui/theme.c:1281
#: ../src/ui/theme.c:1351
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "No se ha podido interpretar el valor alfa «%s» en el color mezclado"
#: ../src/ui/theme.c:1291
#: ../src/ui/theme.c:1361
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "El valor alfa «%s» en el color mezclado no está entre 0.0 y 1.0"
#: ../src/ui/theme.c:1338
#: ../src/ui/theme.c:1408
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
@ -1182,31 +1233,31 @@ msgstr ""
"El formato de sombreado es «shade/base_color/factor», «%s» no coincide con "
"el formato"
#: ../src/ui/theme.c:1349
#: ../src/ui/theme.c:1419
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr ""
"No se ha podido interpretar el factor de sombreado «%s» en el color del "
"sombreado"
#: ../src/ui/theme.c:1359
#: ../src/ui/theme.c:1429
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "El factor de sombreado «%s» en el color sombreado es negativo"
#: ../src/ui/theme.c:1388
#: ../src/ui/theme.c:1458
#, c-format
msgid "Could not parse color \"%s\""
msgstr "No se ha podido interpretar el color «%s»"
#: ../src/ui/theme.c:1646
#: ../src/ui/theme.c:1769
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr ""
"La expresión de coordenadas contenía un carácter «%s» en cual no está "
"permitido"
#: ../src/ui/theme.c:1673
#: ../src/ui/theme.c:1796
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@ -1215,13 +1266,13 @@ msgstr ""
"La expresión de coordenadas contenía un número de coma flotante «%s» en cual "
"no pudo ser analizado"
#: ../src/ui/theme.c:1687
#: ../src/ui/theme.c:1810
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr ""
"La expresión de coordenadas contenía un entero «%s» que no pudo ser analizado"
#: ../src/ui/theme.c:1809
#: ../src/ui/theme.c:1932
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -1230,17 +1281,17 @@ msgstr ""
"La expresión de coordenadas contenía un operador inválido al inicio de su "
"texto: «%s»"
#: ../src/ui/theme.c:1866
#: ../src/ui/theme.c:1989
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "La expresión de coordenadas estaba vacía o no fue entendida"
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
#: ../src/ui/theme.c:2100 ../src/ui/theme.c:2110 ../src/ui/theme.c:2144
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "La expresión de coordenadas resultó en un error de división por cero"
#: ../src/ui/theme.c:2029
#: ../src/ui/theme.c:2152
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
@ -1248,7 +1299,7 @@ msgstr ""
"La expresión de coordenadas intentó usar un operador mod con un número de "
"coma flotante"
#: ../src/ui/theme.c:2085
#: ../src/ui/theme.c:2208
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
@ -1256,19 +1307,19 @@ msgstr ""
"La expresión de coordenadas tiene un operador «%s» donde se esperaba un "
"operando"
#: ../src/ui/theme.c:2094
#: ../src/ui/theme.c:2217
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr ""
"La expresión de coordenadas tiene un operando donde se esperaba un operador"
#: ../src/ui/theme.c:2102
#: ../src/ui/theme.c:2225
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr ""
"La expresión de coordenadas termina con una operador en vez de un operando"
#: ../src/ui/theme.c:2112
#: ../src/ui/theme.c:2235
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1277,42 +1328,42 @@ msgstr ""
"La expresión de coordenadas tiene el operador «%c» seguido del operador «%c» "
"sin un operando entre ellos"
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
#: ../src/ui/theme.c:2386 ../src/ui/theme.c:2431
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr ""
"La expresión de coordenadas tenía una variable o constante desconocida «%s»"
#: ../src/ui/theme.c:2362
#: ../src/ui/theme.c:2485
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "El parser de la expresión de coordenadas desbordó su búfer."
#: ../src/ui/theme.c:2391
#: ../src/ui/theme.c:2514
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr ""
"La expresión de coordenadas tenía un paréntesis cerrado sin un paréntesis "
"abierto"
#: ../src/ui/theme.c:2455
#: ../src/ui/theme.c:2578
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr ""
"La expresión de coordenadas tenía un paréntesis abierto sin un paréntesis "
"cerrado"
#: ../src/ui/theme.c:2466
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "La expresión de coordenadas no parece tener ni operadores ni operandos"
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
#: ../src/ui/theme.c:2801 ../src/ui/theme.c:2821 ../src/ui/theme.c:2841
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "El tema contenía una expresión que ha resultado en un error: %s\n"
#: ../src/ui/theme.c:4410
#: ../src/ui/theme.c:4512
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -1321,25 +1372,25 @@ msgstr ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> debe ser "
"especificado para este estilo de marco"
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
#: ../src/ui/theme.c:5042 ../src/ui/theme.c:5067
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Falta <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
#: ../src/ui/theme.c:5013
#: ../src/ui/theme.c:5115
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Ocurrió un error al cargar el tema «%s»: %s\n"
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
#: ../src/ui/theme.c:5251 ../src/ui/theme.c:5258 ../src/ui/theme.c:5265
#: ../src/ui/theme.c:5272 ../src/ui/theme.c:5279
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "No se configuró <%s> para el tema «%s»"
#: ../src/ui/theme.c:5185
#: ../src/ui/theme.c:5287
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1348,7 +1399,7 @@ msgstr ""
"No hay un estilo de marco para el tipo de ventana «%s» en el tema «%s», "
"añada un elemento <window type=\"%s\" style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
#: ../src/ui/theme.c:5737 ../src/ui/theme.c:5799 ../src/ui/theme.c:5862
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
@ -1356,7 +1407,7 @@ msgstr ""
"Las constantes definidas por el usuario deben comenzar con una letra "
"mayúscula; «%s» no lo hace"
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
#: ../src/ui/theme.c:5745 ../src/ui/theme.c:5807 ../src/ui/theme.c:5870
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "La constante «%s» ya ha sido definida"
@ -1817,92 +1868,92 @@ msgstr "Esto es un mensaje de ejemplo en un diálogo de ejemplo"
msgid "Fake menu item %d\n"
msgstr "Elemento de menú de pega %d\n"
#: ../src/ui/theme-viewer.c:370
#: ../src/ui/theme-viewer.c:371
msgid "Border-only window"
msgstr "Ventana con sólo borde"
#: ../src/ui/theme-viewer.c:372
#: ../src/ui/theme-viewer.c:373
msgid "Bar"
msgstr "Barra"
#: ../src/ui/theme-viewer.c:389
#: ../src/ui/theme-viewer.c:390
msgid "Normal Application Window"
msgstr "Ventana de aplicación normal"
#: ../src/ui/theme-viewer.c:393
#: ../src/ui/theme-viewer.c:394
msgid "Dialog Box"
msgstr "Caja de diálogo"
#: ../src/ui/theme-viewer.c:397
#: ../src/ui/theme-viewer.c:398
msgid "Modal Dialog Box"
msgstr "Caja de diálogo modal"
#: ../src/ui/theme-viewer.c:401
#: ../src/ui/theme-viewer.c:402
msgid "Utility Palette"
msgstr "Paleta de utilidades"
#: ../src/ui/theme-viewer.c:405
#: ../src/ui/theme-viewer.c:406
msgid "Torn-off Menu"
msgstr "Menú apagado"
#: ../src/ui/theme-viewer.c:409
#: ../src/ui/theme-viewer.c:410
msgid "Border"
msgstr "Borde"
#: ../src/ui/theme-viewer.c:413
#: ../src/ui/theme-viewer.c:414
msgid "Attached Modal Dialog"
msgstr "Diálogo modal adjunto"
#: ../src/ui/theme-viewer.c:744
#: ../src/ui/theme-viewer.c:747
#, c-format
msgid "Button layout test %d"
msgstr "Test de distribución de botones %d"
#: ../src/ui/theme-viewer.c:773
#: ../src/ui/theme-viewer.c:776
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g milisegundos para dibujar un marco de ventana"
#: ../src/ui/theme-viewer.c:818
#: ../src/ui/theme-viewer.c:821
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Uso: metacity-theme-viewer [NOMBRETEMA]\n"
#: ../src/ui/theme-viewer.c:825
#: ../src/ui/theme-viewer.c:828
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Ocurrió un error al cargar el tema:«%s»\n"
#: ../src/ui/theme-viewer.c:831
#: ../src/ui/theme-viewer.c:834
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Se cargó el tema «%s» en %g segundos\n"
#: ../src/ui/theme-viewer.c:875
#: ../src/ui/theme-viewer.c:878
msgid "Normal Title Font"
msgstr "Tipografía de título normal"
#: ../src/ui/theme-viewer.c:881
#: ../src/ui/theme-viewer.c:884
msgid "Small Title Font"
msgstr "Tipografía de título pequeña"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:890
msgid "Large Title Font"
msgstr "Tipografía de título grande"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:895
msgid "Button Layouts"
msgstr "Distribución de botones"
#: ../src/ui/theme-viewer.c:897
#: ../src/ui/theme-viewer.c:900
msgid "Benchmark"
msgstr "Banco de pruebas"
#: ../src/ui/theme-viewer.c:949
#: ../src/ui/theme-viewer.c:952
msgid "Window Title Goes Here"
msgstr "El título de la ventana va aquí"
#: ../src/ui/theme-viewer.c:1055
#: ../src/ui/theme-viewer.c:1058
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
@ -1913,47 +1964,50 @@ msgstr ""
"marco) y %g segundos de tiempo estándar incluyendo recursos del servidor X "
"(%g milisegundos por marco)\n"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned TRUE but set error"
msgstr ""
"prueba de expresión de la posición devolvió TRUE pero estableció un error"
#: ../src/ui/theme-viewer.c:1276
#: ../src/ui/theme-viewer.c:1279
msgid "position expression test returned FALSE but didn't set error"
msgstr ""
"prueba de expresión de la posición devolvió FASE pero no estableció un error"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1283
msgid "Error was expected but none given"
msgstr "Se esperaba un error, pero no se dio ninguno"
#: ../src/ui/theme-viewer.c:1282
#: ../src/ui/theme-viewer.c:1285
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Se esperaba el error %d pero se dio el %d"
#: ../src/ui/theme-viewer.c:1288
#: ../src/ui/theme-viewer.c:1291
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "No se esperaba un error pero se devolvió uno: %s"
#: ../src/ui/theme-viewer.c:1292
#: ../src/ui/theme-viewer.c:1295
#, c-format
msgid "x value was %d, %d was expected"
msgstr "el valor x era %d, se esperaba %d"
#: ../src/ui/theme-viewer.c:1295
#: ../src/ui/theme-viewer.c:1298
#, c-format
msgid "y value was %d, %d was expected"
msgstr "el valor y era %d, se esperaba %d"
#: ../src/ui/theme-viewer.c:1360
#: ../src/ui/theme-viewer.c:1363
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
"%d expresiones de coordenadas interpretadas en %g segundos (%g segundos de "
"media)\n"
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
#~ msgstr "Falló al obtener el color %s[%s] del tema de GTK+.\n"
#~ msgid ""
#~ "Don't make fullscreen windows that are maximized and have no decorations"
#~ msgstr ""

154
po/gl.po
View File

@ -9,13 +9,14 @@
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
# Fran Dieguez <fran.dieguez@glug.es>, 2009.
# Fran Diéguez <frandieguez@gnome.org>, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gl\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-22 00:53+0100\n"
"PO-Revision-Date: 2011-03-22 00:54+0100\n"
"Last-Translator: \n"
"POT-Creation-Date: 2011-07-04 22:23+0200\n"
"PO-Revision-Date: 2011-07-04 22:23+0200\n"
"Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
@ -24,6 +25,17 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.2\n"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:509
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr ""
"Non foi posíbel obter a selección do xestor de xanelas na pantalla %i na "
"visualización «%s»"
#: ../src/core/all-keybindings.h:88
msgid "Switch to workspace 1"
msgstr "Cambiar ao espazo de traballo 1"
@ -348,13 +360,16 @@ msgstr "Evento de campá"
msgid "Unknown window information request: %d"
msgstr "Petición de información de xanela descoñecida: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> non está respondendo."
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
msgid "Application is not responding."
msgstr "O Aplicativo non está respondendo."
#: ../src/core/delete.c:119
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@ -362,11 +377,11 @@ msgstr ""
"Pode elixir esperar un momento para ver se continúa ou forzar ao aplicativo "
"a pechar completamente."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "Espe_rar"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "_Forzar a saída"
@ -437,12 +452,12 @@ msgstr "Iniciar sesión desde o ficheiro de salvagarda"
msgid "Make X calls synchronous"
msgstr "Facer que as chamadas a X sexan sincrónicas"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Fallou ao dixitalizar o directorio de temas: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -574,12 +589,12 @@ msgstr ""
"Produciuse un erro ao estabelecer o estado das lapelas en xanelas emerxentes "
"%s\n"
#: ../src/core/screen.c:623
#: ../src/core/screen.c:663
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "A pantalla %d na visualización «%s» non é válida\n"
#: ../src/core/screen.c:639
#: ../src/core/screen.c:679
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -588,7 +603,7 @@ msgstr ""
"A visualización %d na pantalla «%s» ten xa un xestor de xanelas, tente usar "
"a opción --replace para substituír o xestor de xanelas.\n"
#: ../src/core/screen.c:666
#: ../src/core/screen.c:706
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@ -596,64 +611,64 @@ msgstr ""
"Non foi posíbel obter a selección do xestor de xanelas na pantalla %d na "
"visualización «%s»\n"
#: ../src/core/screen.c:721
#: ../src/core/screen.c:761
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "A visualización %d na pantalla «%s» ten xa un xestor de xanelas\n"
#: ../src/core/screen.c:906
#: ../src/core/screen.c:946
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Non foi posíbel liberar a visualización %d na pantalla «%s»\n"
#: ../src/core/session.c:837 ../src/core/session.c:844
#: ../src/core/session.c:843 ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Non foi posíbel crear o directorio «%s»: %s\n"
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Non foi posíbel abrir o ficheiro de sesión «%s» para escritura: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Erro ao escribir o ficheiro de sesión «%s»: %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Erro ao pechar o ficheiro de sesión «%s»: %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Produciuse un fallo ao analizar o ficheiro de sesión gardado: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "O atributo <mutter_session> foi visto pero xa temos o ID de sesión"
#: ../src/core/session.c:1192 ../src/core/session.c:1267
#: ../src/core/session.c:1299 ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Atributo descoñecido %s no elemento <%s>"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "etiqueta <window> aniñada"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Elemento descoñecido %s"
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@ -698,13 +713,13 @@ msgid "Window manager error: "
msgstr "Erro do xestor de xanelas: "
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6752
#: ../src/core/window.c:6886
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -720,7 +735,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7415
#: ../src/core/window.c:7549
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -740,7 +755,7 @@ msgstr "O aplicativo configurou un _NET_WM_PID %lu falso\n"
msgid "%s (on %s)"
msgstr "%s (en %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1484
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
@ -834,47 +849,47 @@ msgstr "Espazos de traballo só no principal"
msgid "Usage: %s\n"
msgstr "Uso: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1280
msgid "Close Window"
msgstr "Pechar a xanela"
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1283
msgid "Window Menu"
msgstr "Menú da xanela"
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1286
msgid "Minimize Window"
msgstr "Minimizar a xanela"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1289
msgid "Maximize Window"
msgstr "Maximizar a xanela"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1292
msgid "Restore Window"
msgstr "Restaurar a xanela"
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1295
msgid "Roll Up Window"
msgstr "Pregar a xanela"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1298
msgid "Unroll Window"
msgstr "Despregar a xanela"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1301
msgid "Keep Window On Top"
msgstr "Manter a xanela na parte superior"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1304
msgid "Remove Window From Top"
msgstr "Quitar a xanela da parte superior"
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1307
msgid "Always On Visible Workspace"
msgstr "Sempre no espazo de traballo visíbel"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1310
msgid "Put Window On Only One Workspace"
msgstr "Pór a xanela nun só espazo de traballo"
@ -1189,13 +1204,18 @@ msgstr "O factor de sombreado «%s» na cor sombreada é negativo"
msgid "Could not parse color \"%s\""
msgstr "Non foi posíbel analizar a cor «%s»"
#: ../src/ui/theme.c:1646
#: ../src/ui/theme.c:1481
#, c-format
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
msgstr "Produciuse un fallo ao obter a cor %s[%s] desde o tema de GTK+.\n"
#: ../src/ui/theme.c:1713
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr ""
"A expresión de coordenadas contén un carácter «%s» que non está permitido"
#: ../src/ui/theme.c:1673
#: ../src/ui/theme.c:1740
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@ -1204,14 +1224,14 @@ msgstr ""
"A expresión de coordenadas contén un número de coma flotante «%s» que non "
"foi posíbel analizar"
#: ../src/ui/theme.c:1687
#: ../src/ui/theme.c:1754
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr ""
"A expresión de coordenadas contén un enteiro «%s» que non foi posíbel "
"analizar"
#: ../src/ui/theme.c:1809
#: ../src/ui/theme.c:1876
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -1220,17 +1240,17 @@ msgstr ""
"A expresión de coordenadas contén un operador non válido ao inicio do seu "
"texto: «%s»"
#: ../src/ui/theme.c:1866
#: ../src/ui/theme.c:1933
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "A expresión de coordenadas está baleira ou non se entendeu"
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "A expresión de coordenadas resultou nun erro de división por cero"
#: ../src/ui/theme.c:2029
#: ../src/ui/theme.c:2096
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
@ -1238,25 +1258,25 @@ msgstr ""
"A expresión de coordenadas tentou usar un operador mod cun número de coma "
"flotante"
#: ../src/ui/theme.c:2085
#: ../src/ui/theme.c:2152
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr ""
"A expresión de coordenadas ten un operador «%s» onde se esperaba un operando"
#: ../src/ui/theme.c:2094
#: ../src/ui/theme.c:2161
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr ""
"A expresión de coordenadas ten un operando onde se esperaba un operador"
#: ../src/ui/theme.c:2102
#: ../src/ui/theme.c:2169
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "A expresión de coordenadas remata cun operador en vez dun operando"
#: ../src/ui/theme.c:2112
#: ../src/ui/theme.c:2179
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1265,42 +1285,42 @@ msgstr ""
"A expresión de coordenadas ten un operador \"%c\" seguido do operador \"%c\" "
"sen un operando entre eles"
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr ""
"A expresión de coordenadas ten unha variábel ou constante descoñecida «%s»"
#: ../src/ui/theme.c:2362
#: ../src/ui/theme.c:2429
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "O analizador da expresión de coordenadas desbordou o seu búfer."
#: ../src/ui/theme.c:2391
#: ../src/ui/theme.c:2458
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr ""
"A expresión de coordenadas ten unha paréntese pechada sen unha paréntese "
"aberta"
#: ../src/ui/theme.c:2455
#: ../src/ui/theme.c:2522
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr ""
"A expresión de coordenadas ten unha paréntese aberta sen unha paréntese "
"pechada"
#: ../src/ui/theme.c:2466
#: ../src/ui/theme.c:2533
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "A expresión de coordenadas non parece ter nin operadores nin operandos"
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "O tema contiña unha expresión que resultou ser un erro: %s\n"
#: ../src/ui/theme.c:4410
#: ../src/ui/theme.c:4482
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -1309,24 +1329,24 @@ msgstr ""
"<button function=«%s» state=«%s» draw_ops=\"whatever\"/> débese especificar "
"para este estilo de marco"
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "Falta <frame state=«%s» resize=«%s» focus=«%s» style=\"whatever\"/>"
#: ../src/ui/theme.c:5013
#: ../src/ui/theme.c:5085
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Produciuse un fallo ao cargar o tema «%s»: %s\n"
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "Non se configurou <%s> para o tema «%s»"
#: ../src/ui/theme.c:5185
#: ../src/ui/theme.c:5257
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1335,7 +1355,7 @@ msgstr ""
"Non hai un estilo de marco para o tipo de xanela «%s» no tema «%s», engada "
"un elemento <window type=«%s» style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
@ -1343,7 +1363,7 @@ msgstr ""
"As constantes definidas polo usuario deben comezar cunha letra maiúscula; "
"«%s» non o fai"
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "A constante «%s» xa foi definida"

332
po/he.po
View File

@ -9,62 +9,72 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity.HEAD.he\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-26 00:34+0200\n"
"PO-Revision-Date: 2011-03-26 00:35+0200\n"
"POT-Creation-Date: 2011-07-15 10:38+0300\n"
"PO-Revision-Date: 2011-07-15 10:38+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <he@li.org>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.10.2\n"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:509
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "מנהל תצוגת חלונות אחר כבר פועל במסך %i בתצוגה \"%s\"."
#: ../src/core/all-keybindings.h:88
msgid "Switch to workspace 1"
msgstr "Switch to workspace 1"
msgstr "מעבר למרחב עבודה 1"
#: ../src/core/all-keybindings.h:90
msgid "Switch to workspace 2"
msgstr "Switch to workspace 2"
msgstr "מעבר למרחב עבודה 2"
#: ../src/core/all-keybindings.h:92
msgid "Switch to workspace 3"
msgstr "Switch to workspace 3"
msgstr "מעבר למרחב עבודה 3"
#: ../src/core/all-keybindings.h:94
msgid "Switch to workspace 4"
msgstr "Switch to workspace 4"
msgstr "מעבר למרחב עבודה 4"
#: ../src/core/all-keybindings.h:96
msgid "Switch to workspace 5"
msgstr "Switch to workspace 5"
msgstr "מעבר למרחב עבודה 5"
#: ../src/core/all-keybindings.h:98
msgid "Switch to workspace 6"
msgstr "Switch to workspace 6"
msgstr "מעבר למרחב עבודה 6"
#: ../src/core/all-keybindings.h:100
msgid "Switch to workspace 7"
msgstr "Switch to workspace 7"
msgstr "מעבר למרחב עבודה 7"
#: ../src/core/all-keybindings.h:102
msgid "Switch to workspace 8"
msgstr "Switch to workspace 8"
msgstr "מעבר למרחב עבודה 8"
#: ../src/core/all-keybindings.h:104
msgid "Switch to workspace 9"
msgstr "Switch to workspace 9"
msgstr "מעבר למרחב עבודה 9"
#: ../src/core/all-keybindings.h:106
msgid "Switch to workspace 10"
msgstr "Switch to workspace 10"
msgstr "מעבר למרחב עבודה 10"
#: ../src/core/all-keybindings.h:108
msgid "Switch to workspace 11"
msgstr "Switch to workspace 11"
msgstr "מעבר למרחב עבודה 11"
#: ../src/core/all-keybindings.h:110
msgid "Switch to workspace 12"
msgstr "Switch to workspace 12"
msgstr "מעבר למרחב עבודה 12"
#: ../src/core/all-keybindings.h:122
msgid "Switch to workspace on the left of the current workspace"
@ -136,7 +146,7 @@ msgstr "Hide all normal windows and set focus to the desktop"
#: ../src/core/all-keybindings.h:206
msgid "Show the panel's main menu"
msgstr "Show the panel's main menu"
msgstr "הצגת התפריט הראשי של הלוח"
#: ../src/core/all-keybindings.h:209
msgid "Show the panel's \"Run Application\" dialog box"
@ -144,31 +154,31 @@ msgstr "Show the panel's \"Run Application\" dialog box"
#: ../src/core/all-keybindings.h:211
msgid "Start or stop recording the session"
msgstr "התחלה או עצירה של צילום ההפעלה"
msgstr "התחלה או עצירה של הקלטת ההפעלה"
#: ../src/core/all-keybindings.h:252
msgid "Take a screenshot"
msgstr "Take a screenshot"
msgstr "צילום תמונת מסך"
#: ../src/core/all-keybindings.h:254
msgid "Take a screenshot of a window"
msgstr "Take a screenshot of a window"
msgstr "צילום החלון"
#: ../src/core/all-keybindings.h:256
msgid "Run a terminal"
msgstr "Run a terminal"
msgstr "הפעלת מסוף"
#: ../src/core/all-keybindings.h:271
msgid "Activate the window menu"
msgstr "Activate the window menu"
msgstr "הפעלת תפריט החלון"
#: ../src/core/all-keybindings.h:274
msgid "Toggle fullscreen mode"
msgstr "Toggle fullscreen mode"
msgstr "כניסה למצב מסך מלא"
#: ../src/core/all-keybindings.h:276
msgid "Toggle maximization state"
msgstr "Toggle maximization state"
msgstr "הפעלה/כיבוי מצב הגדלה"
#: ../src/core/all-keybindings.h:278
msgid "Toggle whether a window will always be visible over other windows"
@ -335,24 +345,27 @@ msgstr "אירוע פעמון"
msgid "Unknown window information request: %d"
msgstr "Unknown window information request: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr " <tt>%s</tt> אינו מגיב"
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
msgid "Application is not responding."
msgstr "היישום אינו מגיב."
#: ../src/core/delete.c:119
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"באפשרותך להמתין זמן קצר ולתת ליישום להמשיך או להכריח את היישום להסתיים."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "ה_מתנה"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "_אילוץ סגירה"
@ -376,7 +389,7 @@ msgstr "תוכנית אחרת כבר משתמשת במקש %s עם המקש %x
#. Displayed when a keybinding which is
#. * supposed to launch a program fails.
#.
#: ../src/core/keybindings.c:2468
#: ../src/core/keybindings.c:2523
#, c-format
msgid ""
"There was an error running <tt>%s</tt>:\n"
@ -387,12 +400,12 @@ msgstr ""
"\n"
"%s"
#: ../src/core/keybindings.c:2558
#: ../src/core/keybindings.c:2613
#, c-format
msgid "No command %d has been defined.\n"
msgstr "אף פקודה %d לא הוגדרה.\n"
#: ../src/core/keybindings.c:3570
#: ../src/core/keybindings.c:3625
#, c-format
msgid "No terminal command has been defined.\n"
msgstr "אף פקודת מסוף לא הוגדרה.\n"
@ -421,12 +434,12 @@ msgstr "Initialize session from savefile"
msgid "Make X calls synchronous"
msgstr "Make X calls synchronous"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Failed to scan themes directory: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -549,12 +562,12 @@ msgstr "שגיאה בהגדרת מצב מצב החלונות החיים המוס
msgid "Error setting no tab popup status: %s\n"
msgstr "שגיאה בהגדרת מצב ללא לשוניות מוקפצות: %s\n"
#: ../src/core/screen.c:624
#: ../src/core/screen.c:663
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Screen %d on display '%s' is invalid\n"
#: ../src/core/screen.c:640
#: ../src/core/screen.c:679
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -563,71 +576,71 @@ msgstr ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
"replace option to replace the current window manager.\n"
#: ../src/core/screen.c:667
#: ../src/core/screen.c:706
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
#: ../src/core/screen.c:722
#: ../src/core/screen.c:761
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Screen %d on display \"%s\" already has a window manager\n"
#: ../src/core/screen.c:907
#: ../src/core/screen.c:946
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Could not release screen %d on display \"%s\"\n"
#: ../src/core/session.c:837 ../src/core/session.c:844
#: ../src/core/session.c:843 ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Could not create directory '%s': %s\n"
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Could not open session file '%s' for writing: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Error writing session file '%s': %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Error closing session file '%s': %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Failed to parse saved session file: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "התכונה <mutter_session> מופיעה אך כבר יש בידינו את מספר זיהוי ההפעלה"
#: ../src/core/session.c:1192 ../src/core/session.c:1267
#: ../src/core/session.c:1299 ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Unknown attribute %s on <%s> element"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "nested <window> tag"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Unknown element %s"
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@ -672,13 +685,13 @@ msgid "Window manager error: "
msgstr "Window manager error: "
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6795
#: ../src/core/window.c:6903
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -694,14 +707,14 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7458
#: ../src/core/window.c:7566
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
"d x %d and max size %d x %d; this doesn't make much sense.\n"
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
"d x %d and max size %d x %d; this doesn't make much sense.\n"
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
#: ../src/core/window-props.c:309
#, c-format
@ -713,11 +726,16 @@ msgstr "Application set a bogus _NET_WM_PID %lu\n"
msgid "%s (on %s)"
msgstr "%s (מעל %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1488
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
#: ../src/core/window-props.c:1500
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
#: ../src/core/xprops.c:155
#, c-format
msgid ""
@ -804,47 +822,47 @@ msgstr "Workspaces only on primary"
msgid "Usage: %s\n"
msgstr "שימוש: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1289
msgid "Close Window"
msgstr "סגור חלון"
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1292
msgid "Window Menu"
msgstr "תפריט חלון"
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1295
msgid "Minimize Window"
msgstr "מזער חלון"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1298
msgid "Maximize Window"
msgstr "הגדל חלון"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1301
msgid "Restore Window"
msgstr "שחזר חלון"
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1304
msgid "Roll Up Window"
msgstr "גלול חלון מעלה"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1307
msgid "Unroll Window"
msgstr "בטל גלילה"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1310
msgid "Keep Window On Top"
msgstr "שמור על החלון גלוי"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1313
msgid "Remove Window From Top"
msgstr "בטל שמירת החלון גלוי"
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1316
msgid "Always On Visible Workspace"
msgstr "הראה בכל סביבות העבודה"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1319
msgid "Put Window On Only One Workspace"
msgstr "הראה את החלון על סביבת עבודה אחת בלבד"
@ -1047,48 +1065,75 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:252
msgid "top"
msgstr "top"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:254
msgid "bottom"
msgstr "bottom"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:256
msgid "left"
msgstr "left"
#: ../src/ui/theme.c:261
#: ../src/ui/theme.c:258
msgid "right"
msgstr "right"
#: ../src/ui/theme.c:288
#: ../src/ui/theme.c:285
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "frame geometry does not specify \"%s\" dimension"
#: ../src/ui/theme.c:307
#: ../src/ui/theme.c:304
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "frame geometry does not specify dimension \"%s\" for border \"%s\""
#: ../src/ui/theme.c:344
#: ../src/ui/theme.c:341
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Button aspect ratio %g is not reasonable"
#: ../src/ui/theme.c:356
#: ../src/ui/theme.c:353
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Frame geometry does not specify size of buttons"
#: ../src/ui/theme.c:1064
#: ../src/ui/theme.c:1061
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Gradients should have at least two colors"
#: ../src/ui/theme.c:1202
#: ../src/ui/theme.c:1206
#, 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 custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
#: ../src/ui/theme.c:1222
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
msgstr ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
#: ../src/ui/theme.c:1236
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
msgstr ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
#: ../src/ui/theme.c:1272
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -1097,7 +1142,7 @@ msgstr ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
"where NORMAL is the state; could not parse \"%s\""
#: ../src/ui/theme.c:1216
#: ../src/ui/theme.c:1286
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@ -1106,17 +1151,17 @@ msgstr ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
"fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
#: ../src/ui/theme.c:1227
#: ../src/ui/theme.c:1297
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Did not understand state \"%s\" in color specification"
#: ../src/ui/theme.c:1240
#: ../src/ui/theme.c:1310
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Did not understand color component \"%s\" in color specification"
#: ../src/ui/theme.c:1270
#: ../src/ui/theme.c:1340
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -1125,44 +1170,44 @@ msgstr ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
"format"
#: ../src/ui/theme.c:1281
#: ../src/ui/theme.c:1351
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Could not parse alpha value \"%s\" in blended color"
#: ../src/ui/theme.c:1291
#: ../src/ui/theme.c:1361
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
#: ../src/ui/theme.c:1338
#: ../src/ui/theme.c:1408
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
#: ../src/ui/theme.c:1349
#: ../src/ui/theme.c:1419
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Could not parse shade factor \"%s\" in shaded color"
#: ../src/ui/theme.c:1359
#: ../src/ui/theme.c:1429
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Shade factor \"%s\" in shaded color is negative"
#: ../src/ui/theme.c:1388
#: ../src/ui/theme.c:1458
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Could not parse color \"%s\""
#: ../src/ui/theme.c:1646
#: ../src/ui/theme.c:1769
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Coordinate expression contains character '%s' which is not allowed"
#: ../src/ui/theme.c:1673
#: ../src/ui/theme.c:1796
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@ -1171,12 +1216,12 @@ msgstr ""
"Coordinate expression contains floating point number '%s' which could not be "
"parsed"
#: ../src/ui/theme.c:1687
#: ../src/ui/theme.c:1810
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Coordinate expression contains integer '%s' which could not be parsed"
#: ../src/ui/theme.c:1809
#: ../src/ui/theme.c:1932
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -1185,41 +1230,41 @@ msgstr ""
"Coordinate expression contained unknown operator at the start of this text: "
"\"%s\""
#: ../src/ui/theme.c:1866
#: ../src/ui/theme.c:1989
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Coordinate expression was empty or not understood"
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
#: ../src/ui/theme.c:2100 ../src/ui/theme.c:2110 ../src/ui/theme.c:2144
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Coordinate expression results in division by zero"
#: ../src/ui/theme.c:2029
#: ../src/ui/theme.c:2152
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
msgstr ""
"Coordinate expression tries to use mod operator on a floating-point number"
#: ../src/ui/theme.c:2085
#: ../src/ui/theme.c:2208
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
#: ../src/ui/theme.c:2094
#: ../src/ui/theme.c:2217
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Coordinate expression had an operand where an operator was expected"
#: ../src/ui/theme.c:2102
#: ../src/ui/theme.c:2225
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Coordinate expression ended with an operator instead of an operand"
#: ../src/ui/theme.c:2112
#: ../src/ui/theme.c:2235
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1228,38 +1273,38 @@ msgstr ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
"operand in between"
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
#: ../src/ui/theme.c:2386 ../src/ui/theme.c:2431
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Coordinate expression had unknown variable or constant \"%s\""
#: ../src/ui/theme.c:2362
#: ../src/ui/theme.c:2485
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Coordinate expression parser overflowed its buffer."
#: ../src/ui/theme.c:2391
#: ../src/ui/theme.c:2514
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Coordinate expression had a close parenthesis with no open parenthesis"
#: ../src/ui/theme.c:2455
#: ../src/ui/theme.c:2578
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr ""
"Coordinate expression had an open parenthesis with no close parenthesis"
#: ../src/ui/theme.c:2466
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "Coordinate expression doesn't seem to have any operators or operands"
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
#: ../src/ui/theme.c:2801 ../src/ui/theme.c:2821 ../src/ui/theme.c:2841
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Theme contained an expression that resulted in an error: %s\n"
#: ../src/ui/theme.c:4410
#: ../src/ui/theme.c:4512
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -1268,25 +1313,25 @@ msgstr ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
"specified for this frame style"
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
#: ../src/ui/theme.c:5042 ../src/ui/theme.c:5067
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
#: ../src/ui/theme.c:5013
#: ../src/ui/theme.c:5115
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Failed to load theme \"%s\": %s\n"
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
#: ../src/ui/theme.c:5251 ../src/ui/theme.c:5258 ../src/ui/theme.c:5265
#: ../src/ui/theme.c:5272 ../src/ui/theme.c:5279
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "No <%s> set for theme \"%s\""
#: ../src/ui/theme.c:5185
#: ../src/ui/theme.c:5287
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1295,14 +1340,14 @@ msgstr ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
"type=\"%s\" style_set=\"whatever\"/> element"
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
#: ../src/ui/theme.c:5737 ../src/ui/theme.c:5799 ../src/ui/theme.c:5862
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
#: ../src/ui/theme.c:5745 ../src/ui/theme.c:5807 ../src/ui/theme.c:5870
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Constant \"%s\" has already been defined"
@ -1750,92 +1795,92 @@ msgstr "This is a sample message in a sample dialog"
msgid "Fake menu item %d\n"
msgstr "Fake menu item %d\n"
#: ../src/ui/theme-viewer.c:370
#: ../src/ui/theme-viewer.c:371
msgid "Border-only window"
msgstr "Border-only window"
#: ../src/ui/theme-viewer.c:372
#: ../src/ui/theme-viewer.c:373
msgid "Bar"
msgstr "Bar"
#: ../src/ui/theme-viewer.c:389
#: ../src/ui/theme-viewer.c:390
msgid "Normal Application Window"
msgstr "Normal Application Window"
#: ../src/ui/theme-viewer.c:393
#: ../src/ui/theme-viewer.c:394
msgid "Dialog Box"
msgstr "Dialog Box"
#: ../src/ui/theme-viewer.c:397
#: ../src/ui/theme-viewer.c:398
msgid "Modal Dialog Box"
msgstr "Modal Dialog Box"
#: ../src/ui/theme-viewer.c:401
#: ../src/ui/theme-viewer.c:402
msgid "Utility Palette"
msgstr "Utility Palette"
#: ../src/ui/theme-viewer.c:405
#: ../src/ui/theme-viewer.c:406
msgid "Torn-off Menu"
msgstr "Torn-off Menu"
#: ../src/ui/theme-viewer.c:409
#: ../src/ui/theme-viewer.c:410
msgid "Border"
msgstr "Border"
#: ../src/ui/theme-viewer.c:413
#: ../src/ui/theme-viewer.c:414
msgid "Attached Modal Dialog"
msgstr "Attached Modal Dialog"
#: ../src/ui/theme-viewer.c:744
#: ../src/ui/theme-viewer.c:747
#, c-format
msgid "Button layout test %d"
msgstr "Button layout test %d"
#: ../src/ui/theme-viewer.c:773
#: ../src/ui/theme-viewer.c:776
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g milliseconds to draw one window frame"
#: ../src/ui/theme-viewer.c:818
#: ../src/ui/theme-viewer.c:821
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Usage: metacity-theme-viewer [THEMENAME]\n"
#: ../src/ui/theme-viewer.c:825
#: ../src/ui/theme-viewer.c:828
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Error loading theme: %s\n"
#: ../src/ui/theme-viewer.c:831
#: ../src/ui/theme-viewer.c:834
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Loaded theme \"%s\" in %g seconds\n"
#: ../src/ui/theme-viewer.c:875
#: ../src/ui/theme-viewer.c:878
msgid "Normal Title Font"
msgstr "Normal Title Font"
#: ../src/ui/theme-viewer.c:881
#: ../src/ui/theme-viewer.c:884
msgid "Small Title Font"
msgstr "Small Title Font"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:890
msgid "Large Title Font"
msgstr "Large Title Font"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:895
msgid "Button Layouts"
msgstr "Button Layouts"
#: ../src/ui/theme-viewer.c:897
#: ../src/ui/theme-viewer.c:900
msgid "Benchmark"
msgstr "Benchmark"
#: ../src/ui/theme-viewer.c:949
#: ../src/ui/theme-viewer.c:952
msgid "Window Title Goes Here"
msgstr "Window Title Goes Here"
#: ../src/ui/theme-viewer.c:1055
#: ../src/ui/theme-viewer.c:1058
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
@ -1846,43 +1891,46 @@ msgstr ""
"seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned TRUE but set error"
msgstr "position expression test returned TRUE but set error"
#: ../src/ui/theme-viewer.c:1276
#: ../src/ui/theme-viewer.c:1279
msgid "position expression test returned FALSE but didn't set error"
msgstr "position expression test returned FALSE but didn't set error"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1283
msgid "Error was expected but none given"
msgstr "Error was expected but none given"
#: ../src/ui/theme-viewer.c:1282
#: ../src/ui/theme-viewer.c:1285
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Error %d was expected but %d given"
#: ../src/ui/theme-viewer.c:1288
#: ../src/ui/theme-viewer.c:1291
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Error not expected but one was returned: %s"
#: ../src/ui/theme-viewer.c:1292
#: ../src/ui/theme-viewer.c:1295
#, c-format
msgid "x value was %d, %d was expected"
msgstr "x value was %d, %d was expected"
#: ../src/ui/theme-viewer.c:1295
#: ../src/ui/theme-viewer.c:1298
#, c-format
msgid "y value was %d, %d was expected"
msgstr "y value was %d, %d was expected"
#: ../src/ui/theme-viewer.c:1360
#: ../src/ui/theme-viewer.c:1363
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
#~ msgstr "Failed to retrieve color %s[%s] from GTK+ theme.\n"
#~ msgid "Turn compositing on"
#~ msgstr "Turn compositing on"

2119
po/ja.po

File diff suppressed because it is too large Load Diff

293
po/lv.po
View File

@ -5,14 +5,15 @@
# Peteris Krisjanis <pecisk@inbox.lv>, 2002.
# Raivis Dejus <orvils@gmail.com>, 2006, 2007, 2009.
# Rudolfs <rudolfs.mazurs@gmail.com>, 2011.
# Rūdofls Mazurs <rudolfs.mazurs@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: lv\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-03-21 19:31+0000\n"
"PO-Revision-Date: 2011-03-26 13:54+0200\n"
"Last-Translator: Rudolfs <rudolfs.mazurs@gmail.com>\n"
"POT-Creation-Date: 2011-07-08 20:41+0000\n"
"PO-Revision-Date: 2011-07-09 22:03+0300\n"
"Last-Translator: Rūdofls Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian <locale@laka.lv>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -21,6 +22,18 @@ msgstr ""
"2);\n"
"X-Generator: Lokalize 1.1\n"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:509
#, c-format
#| msgid ""
#| "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr ""
"Cits kompozīcijas pārvaldnieks jau darbojas ekrānā %d displejā \"%s\"."
#: ../src/core/all-keybindings.h:88
msgid "Switch to workspace 1"
msgstr "Pārslēgties uz 1. darbvietu"
@ -339,13 +352,17 @@ msgstr "Zvana notikums"
msgid "Unknown window information request: %d"
msgstr "Nezināms logu informācijas pieprasījums: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> nereaģē."
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
#| msgid "<tt>%s</tt> is not responding."
msgid "Application is not responding."
msgstr "Lietotne nereaģē."
#: ../src/core/delete.c:119
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@ -353,11 +370,11 @@ msgstr ""
"Jūs varat uzgaidīt neilgu brīdi, līdz tā atgūstas, vai arī aizvērt to "
"piespiedu kārtā."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "_Gaidīt"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "Aizvērt _piespiedu kārtā"
@ -427,12 +444,12 @@ msgstr "Inicializēt sesiju no saglabātā faila"
msgid "Make X calls synchronous"
msgstr "Padarīt X izsaukumus sinhronus"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Neizdevās noskanēt tēmu direktoriju: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -559,12 +576,12 @@ msgstr "Kļūda, iestatot dzīvo slēptā loga statusu: %s\n"
msgid "Error setting no tab popup status: %s\n"
msgstr "Kļūda, iestatot bez ciļņu uzvednes statusu: %s\n"
#: ../src/core/screen.c:623
#: ../src/core/screen.c:663
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Ekrāna %d displejs \"%s\" ir nederīgs\n"
#: ../src/core/screen.c:639
#: ../src/core/screen.c:679
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -573,70 +590,70 @@ msgstr ""
"Ekrāna %d displejam \"%s\" jau ir logu pārvaldnieks; mēģiniet lietot --"
"replace iespēju, lai aizvietotu pašreizējo logu pārvaldnieku.\n"
#: ../src/core/screen.c:666
#: ../src/core/screen.c:706
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "Neizdevās iegūt logu pārvaldnieka izvēli ekrāna %d displejā \"%s\"\n"
#: ../src/core/screen.c:721
#: ../src/core/screen.c:761
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Ekrāna %d displejam \"%s\" jau ir logu pārvaldnieks\n"
#: ../src/core/screen.c:906
#: ../src/core/screen.c:946
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Neizdevās atlaist ekrānu %d uz displeja \"%s\"\n"
#: ../src/core/session.c:837 ../src/core/session.c:844
#: ../src/core/session.c:843 ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Neizdevās izveidot mapi '%s': %s\n"
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Neizdevās atvērt sesijas failu '%s' rakstīšanai: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Kļūda, ierakstot sesijas failu '%s': %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Kļūda, aizverot sesijas failu '%s': %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Kļūda, parsējot saglabāto sesijas failu: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "<mutter_session> atribūts pamanits, bet mums jau ir sesijas ID"
#: ../src/core/session.c:1192 ../src/core/session.c:1267
#: ../src/core/session.c:1299 ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Nezināms atribūts %s <%s> elementam"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "ligzdota <window> birka"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Nezināms elements %s"
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@ -681,13 +698,13 @@ msgid "Window manager error: "
msgstr "Logu pārvaldnieka kļūda: "
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6752
#: ../src/core/window.c:6903
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -703,7 +720,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7415
#: ../src/core/window.c:7566
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
@ -722,11 +739,17 @@ msgstr "Lietotne iestatīja neīstu _NET_WM_PID %lu\n"
msgid "%s (on %s)"
msgstr "%s (uz %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1488
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Nederīgs WM_TRANSIENT_FOR logs 0x%lx norādīts %s.\n"
#: ../src/core/window-props.c:1500
#, c-format
#| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR logs 0x%lx priekš %s veidotu cilpu.\n"
#: ../src/core/xprops.c:155
#, c-format
msgid ""
@ -767,9 +790,6 @@ msgstr ""
"atrodas citās darbvietās) uzturēt pie dzīvības."
#: ../src/mutter.schemas.in.h:3
#| msgid ""
#| "Determines whether workspace switching should happen for windows on all "
#| "monitors or only the primary window."
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
@ -816,47 +836,47 @@ msgstr "Darbvietas tikai uz galvenā"
msgid "Usage: %s\n"
msgstr "Lietojums: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1280
msgid "Close Window"
msgstr "Aizvērt logu"
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1283
msgid "Window Menu"
msgstr "Loga izvēlne"
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1286
msgid "Minimize Window"
msgstr "Minimizēt logu"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1289
msgid "Maximize Window"
msgstr "Maksimizēt logu"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1292
msgid "Restore Window"
msgstr "Atjaunot logu"
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1295
msgid "Roll Up Window"
msgstr "Uzrullēt logu"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1298
msgid "Unroll Window"
msgstr "Norullēt logu"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1301
msgid "Keep Window On Top"
msgstr "Turēt logu virspusē"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1304
msgid "Remove Window From Top"
msgstr "Aizvākt logu no virspuses"
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1307
msgid "Always On Visible Workspace"
msgstr "Vienmēr redzamajā darbvietā"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1310
msgid "Put Window On Only One Workspace"
msgstr "Turēt logu tikai vienā darbvietā"
@ -1059,48 +1079,83 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:252
msgid "top"
msgstr "augša"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:254
msgid "bottom"
msgstr "apakša"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:256
msgid "left"
msgstr "pa kreisi"
#: ../src/ui/theme.c:261
#: ../src/ui/theme.c:258
msgid "right"
msgstr "pa labi"
#: ../src/ui/theme.c:288
#: ../src/ui/theme.c:285
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "rāmja ģeometrija nenosaka \"%s\" dimensiju"
#: ../src/ui/theme.c:307
#: ../src/ui/theme.c:304
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "rāmja ģeometrija nenosaka dimensiju \"%s\" robežai \"%s\""
#: ../src/ui/theme.c:344
#: ../src/ui/theme.c:341
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Pogas samērs %g nav saprātīgs"
#: ../src/ui/theme.c:356
#: ../src/ui/theme.c:353
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Rāmja ģeometrija nenosaka pogu izmēru"
#: ../src/ui/theme.c:1064
#: ../src/ui/theme.c:1061
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Krāsu pārejās ir jābūt vismaz divām krāsām"
#: ../src/ui/theme.c:1202
#: ../src/ui/theme.c:1206
#, c-format
#| msgid ""
#| "GTK color specification must have a close bracket after the state, e.g. "
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
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 pielāgotajā krāsu specifikācijā ir jābūt krāsas nosaukumam un atkāpšanās "
"ceļam iekavās, piem., gtk:custom(foo,bar); neizdevās parsēt \"%s\""
#: ../src/ui/theme.c:1222
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
msgstr ""
"Nederīga rakstzīme '%c' iekš color_name parameter no gtk:custom, tikai "
"A-Za-z0-9-"
"_ ir derīgas"
#: ../src/ui/theme.c:1236
#, c-format
#| msgid ""
#| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
#| "format"
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
msgstr ""
"Gtk:custom formāts ir \"gtk:custom(color_name,fallback)\", \"%s\" "
"neiekļaujas "
"formātā"
#: ../src/ui/theme.c:1272
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -1109,7 +1164,7 @@ msgstr ""
"GTK krāsas specifikācijā ir jābūt stāvoklim iekavās, piem., gtk:fg[NORMAL], "
"kur NORMAL ir stāvoklis; neizdevās parsēt \"%s\""
#: ../src/ui/theme.c:1216
#: ../src/ui/theme.c:1286
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@ -1118,17 +1173,17 @@ msgstr ""
"GTK krāsas specifikācijā ir jābūt kvadrātiekavām pēc stāvokļa, piem., gtk:fg"
"[NORMAL], kur NORMAL ir stāvoklis; neizdevās parsēt \"%s\""
#: ../src/ui/theme.c:1227
#: ../src/ui/theme.c:1297
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Nesaprotams stāvoklis \"%s\" krāsas specifikācijā"
#: ../src/ui/theme.c:1240
#: ../src/ui/theme.c:1310
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Nesaprotams krāsas komponents \"%s\" krāsas specifikācijā"
#: ../src/ui/theme.c:1270
#: ../src/ui/theme.c:1340
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -1137,96 +1192,96 @@ msgstr ""
"Saplūšanas formāts ir \"blend/bg_color/fg_color/alpha\", \"%s\" neatbilst "
"formātam"
#: ../src/ui/theme.c:1281
#: ../src/ui/theme.c:1351
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Neizdevās parsēt alfa vērtību \"%s\" sapludinātajā krāsā"
#: ../src/ui/theme.c:1291
#: ../src/ui/theme.c:1361
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "Alfa vērtība \"%s\" sapludinātajā krāsā nav starp 0.0 un 1.0"
#: ../src/ui/theme.c:1338
#: ../src/ui/theme.c:1408
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"Ēnošanas formāts ir \"shade/base_color/factor\", \"%s\" neatbilst formātam"
#: ../src/ui/theme.c:1349
#: ../src/ui/theme.c:1419
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Neizdevās parsēt ēnas faktoru \"%s\" ēnotajā krāsā"
#: ../src/ui/theme.c:1359
#: ../src/ui/theme.c:1429
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Ēnošanas faktors \"%s\" ēnotajā krāsā ir negatīvs"
#: ../src/ui/theme.c:1388
#: ../src/ui/theme.c:1458
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Neizdevās parsēt krāsu \"%s\""
#: ../src/ui/theme.c:1646
#: ../src/ui/theme.c:1769
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Koordinātu izteiksme satur rakstzīmi '%s', kas nav atļauta"
#: ../src/ui/theme.c:1673
#: ../src/ui/theme.c:1796
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
"parsed"
msgstr "Koordinātu izteiksme satur neparsējamu peldošā punkta skaitli '%s'"
#: ../src/ui/theme.c:1687
#: ../src/ui/theme.c:1810
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Koordinātu izteiksme satur neparsējamu veselu skaitli '%s'"
#: ../src/ui/theme.c:1809
#: ../src/ui/theme.c:1932
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
"\"%s\""
msgstr "Koordinātu izteiksme satur nezināmu operatoru šī teksta sākumā: \"%s\""
#: ../src/ui/theme.c:1866
#: ../src/ui/theme.c:1989
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Koordinātu izteiksme bija tukša vai nesaprasta"
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
#: ../src/ui/theme.c:2100 ../src/ui/theme.c:2110 ../src/ui/theme.c:2144
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Koordinātu izteiksme noved pie dalīšanas ar nulli"
#: ../src/ui/theme.c:2029
#: ../src/ui/theme.c:2152
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
msgstr ""
"Koordinātu izteiksme mēģina lietot mod operatoru uz peldošā punkta skaitļa"
#: ../src/ui/theme.c:2085
#: ../src/ui/theme.c:2208
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Koordinātu izteiksmei ir operators \"%s\", kur tika gaidīts operands"
#: ../src/ui/theme.c:2094
#: ../src/ui/theme.c:2217
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Koordinātu izteiksmei bija operands, kur tika gaidīts operators"
#: ../src/ui/theme.c:2102
#: ../src/ui/theme.c:2225
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Koordinātu izteiksme beidzās ar operatoru, nevis ar operandu"
#: ../src/ui/theme.c:2112
#: ../src/ui/theme.c:2235
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1235,39 +1290,39 @@ msgstr ""
"Koordinātu izteiksmē ir operatoram \"%c\" sekojošais operators \"%c\" bez "
"operanda to starpā"
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
#: ../src/ui/theme.c:2386 ../src/ui/theme.c:2431
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Koordinātu izteiksmē bija nezināms mainīgais vai konstante \"%s\""
#: ../src/ui/theme.c:2362
#: ../src/ui/theme.c:2485
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Koordinātu izteiksme pārpildīja parsera buferi."
#: ../src/ui/theme.c:2391
#: ../src/ui/theme.c:2514
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr ""
"Koordinātu izteiksmei bija aizvērtās iekavas bez nevienas atvērtās iekavas"
#: ../src/ui/theme.c:2455
#: ../src/ui/theme.c:2578
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr ""
"Koordinātu izteiksmei bija atvērtās iekavas bez nevienas aizvērtās iekavas"
#: ../src/ui/theme.c:2466
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "Šķiet, ka koordinātu izteiksmē nav ne operatoru, ne operandu"
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
#: ../src/ui/theme.c:2801 ../src/ui/theme.c:2821 ../src/ui/theme.c:2841
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tēma saturēja izteiksmi, kas noveda pie kļūdas: %s\n"
#: ../src/ui/theme.c:4410
#: ../src/ui/theme.c:4512
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -1276,25 +1331,25 @@ msgstr ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"jebkas\"/> jābūt noteiktam "
"šajā rāmja stilā"
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
#: ../src/ui/theme.c:5042 ../src/ui/theme.c:5067
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Iztrūkst <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"jebkas\"/>"
#: ../src/ui/theme.c:5013
#: ../src/ui/theme.c:5115
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Neizdevās ielādēt tēmu \"%s\": %s\n"
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
#: ../src/ui/theme.c:5251 ../src/ui/theme.c:5258 ../src/ui/theme.c:5265
#: ../src/ui/theme.c:5272 ../src/ui/theme.c:5279
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "Nav iestatīts <%s> tēmai \"%s\""
#: ../src/ui/theme.c:5185
#: ../src/ui/theme.c:5287
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1303,14 +1358,14 @@ msgstr ""
"Nav rāmja stila kopas loga tipam \"%s\" tēmā \"%s\"; pievienojiet <window "
"type=\"%s\" style_set=\"jebkas\"/> elementu"
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
#: ../src/ui/theme.c:5737 ../src/ui/theme.c:5799 ../src/ui/theme.c:5862
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr ""
"Lietotāja definētajām konstantēm jāsākas ar lielo burtu; \"%s\" nesākas"
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
#: ../src/ui/theme.c:5745 ../src/ui/theme.c:5807 ../src/ui/theme.c:5870
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Konstante \"%s\" jau tikusi definēta"
@ -1758,92 +1813,92 @@ msgstr "Šis ir paraugpaziņojums parauga dialogā"
msgid "Fake menu item %d\n"
msgstr "Neīsts izvēlnes elements %d\n"
#: ../src/ui/theme-viewer.c:370
#: ../src/ui/theme-viewer.c:371
msgid "Border-only window"
msgstr "Logs tikai ar apmali"
#: ../src/ui/theme-viewer.c:372
#: ../src/ui/theme-viewer.c:373
msgid "Bar"
msgstr "Josla"
#: ../src/ui/theme-viewer.c:389
#: ../src/ui/theme-viewer.c:390
msgid "Normal Application Window"
msgstr "Normāls lietotnes logs"
#: ../src/ui/theme-viewer.c:393
#: ../src/ui/theme-viewer.c:394
msgid "Dialog Box"
msgstr "Dialoglodziņš"
#: ../src/ui/theme-viewer.c:397
#: ../src/ui/theme-viewer.c:398
msgid "Modal Dialog Box"
msgstr "Modālais dialoglodziņš"
#: ../src/ui/theme-viewer.c:401
#: ../src/ui/theme-viewer.c:402
msgid "Utility Palette"
msgstr "Utilītpalete"
#: ../src/ui/theme-viewer.c:405
#: ../src/ui/theme-viewer.c:406
msgid "Torn-off Menu"
msgstr "Atrauta izvēlne"
#: ../src/ui/theme-viewer.c:409
#: ../src/ui/theme-viewer.c:410
msgid "Border"
msgstr "Apmale"
#: ../src/ui/theme-viewer.c:413
#: ../src/ui/theme-viewer.c:414
msgid "Attached Modal Dialog"
msgstr "Piesaistītais modālais dialogs"
#: ../src/ui/theme-viewer.c:744
#: ../src/ui/theme-viewer.c:747
#, c-format
msgid "Button layout test %d"
msgstr "Pogu izkārtojuma tests %d"
#: ../src/ui/theme-viewer.c:773
#: ../src/ui/theme-viewer.c:776
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g milisekundes, lai uzzīmētu loga rāmi"
#: ../src/ui/theme-viewer.c:818
#: ../src/ui/theme-viewer.c:821
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Pielietojums: metacity-theme-viewer [TĒMASNOSAUKUMS]\n"
#: ../src/ui/theme-viewer.c:825
#: ../src/ui/theme-viewer.c:828
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Kļūda, ielādējot tēmu: %s\n"
#: ../src/ui/theme-viewer.c:831
#: ../src/ui/theme-viewer.c:834
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Tēma \"%s\" ielādēta \"%g\"sekundēs\n"
#: ../src/ui/theme-viewer.c:875
#: ../src/ui/theme-viewer.c:878
msgid "Normal Title Font"
msgstr "Normāls virsraksta fonts"
#: ../src/ui/theme-viewer.c:881
#: ../src/ui/theme-viewer.c:884
msgid "Small Title Font"
msgstr "Mazs virsraksta fonts"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:890
msgid "Large Title Font"
msgstr "Liels virsraksta fonts"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:895
msgid "Button Layouts"
msgstr "Pogu izkārtojumi"
#: ../src/ui/theme-viewer.c:897
#: ../src/ui/theme-viewer.c:900
msgid "Benchmark"
msgstr "Etalonuzdevums"
#: ../src/ui/theme-viewer.c:949
#: ../src/ui/theme-viewer.c:952
msgid "Window Title Goes Here"
msgstr "Šeit paredzēts loga virsraksts"
#: ../src/ui/theme-viewer.c:1055
#: ../src/ui/theme-viewer.c:1058
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
@ -1854,39 +1909,39 @@ msgstr ""
"g sekundēs pēc ierastā laika, ieskaitot X servera resursus (%g milisekundes "
"uz kadru)\n"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned TRUE but set error"
msgstr "pozīcijas izteiksmes tests atgrieza TRUE, bet ziņoja par kļūdu"
#: ../src/ui/theme-viewer.c:1276
#: ../src/ui/theme-viewer.c:1279
msgid "position expression test returned FALSE but didn't set error"
msgstr "pozīcijas izteiksmes tests atgrieza FALSE, bet nenorādīja kļūdu"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1283
msgid "Error was expected but none given"
msgstr "Tika gaidīta kļūda, taču tā netika dota"
#: ../src/ui/theme-viewer.c:1282
#: ../src/ui/theme-viewer.c:1285
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Tika gaidīta kļūda %d, bet saņemta kļūda %d"
#: ../src/ui/theme-viewer.c:1288
#: ../src/ui/theme-viewer.c:1291
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Kļūda netika gaidīta, taču tika saņemta: %s"
#: ../src/ui/theme-viewer.c:1292
#: ../src/ui/theme-viewer.c:1295
#, c-format
msgid "x value was %d, %d was expected"
msgstr "x vērtība bija %d, tika gaidīta %d"
#: ../src/ui/theme-viewer.c:1295
#: ../src/ui/theme-viewer.c:1298
#, c-format
msgid "y value was %d, %d was expected"
msgstr "y vērtība bija %d, tika gaidīta %d"
#: ../src/ui/theme-viewer.c:1360
#: ../src/ui/theme-viewer.c:1363
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d koordinātas izteiksme noparsēta %g sekundēs (vidēji %g sekundēs)\n"

280
po/nb.po
View File

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: mutter 2.91.x\n"
"Project-Id-Version: mutter 3.1.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-22 11:13+0100\n"
"PO-Revision-Date: 2011-03-22 11:13+0100\n"
"POT-Creation-Date: 2011-07-18 14:00+0200\n"
"PO-Revision-Date: 2011-07-18 14:03+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n"
@ -15,6 +15,15 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:509
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
#: ../src/core/all-keybindings.h:88
msgid "Switch to workspace 1"
msgstr "Bytt til arbeidsområde 1"
@ -332,13 +341,16 @@ msgstr "Klokkehendelse"
msgid "Unknown window information request: %d"
msgstr "Ukjent forespørsel om vindusinformasjon: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> svarer ikke."
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
msgid "Application is not responding."
msgstr "Programmet svarer ikke."
#: ../src/core/delete.c:119
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@ -346,11 +358,11 @@ msgstr ""
"Du kan velge å vente en kort stund for å se om det fortsetter eller tvinge "
"programmet til å avslutte helt."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "_Vent"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "_Tvungen nedstenging"
@ -376,7 +388,7 @@ msgstr ""
#. Displayed when a keybinding which is
#. * supposed to launch a program fails.
#.
#: ../src/core/keybindings.c:2468
#: ../src/core/keybindings.c:2523
#, c-format
msgid ""
"There was an error running <tt>%s</tt>:\n"
@ -387,12 +399,12 @@ msgstr ""
"\n"
"%s"
#: ../src/core/keybindings.c:2558
#: ../src/core/keybindings.c:2613
#, c-format
msgid "No command %d has been defined.\n"
msgstr "Ingen kommando %d er definert\n"
#: ../src/core/keybindings.c:3570
#: ../src/core/keybindings.c:3625
#, c-format
msgid "No terminal command has been defined.\n"
msgstr "Ingen terminalkommando er definert\n"
@ -421,12 +433,12 @@ msgstr "Initier sesjonen fra en lagret fil"
msgid "Make X calls synchronous"
msgstr "Gjør X-kall synkrone"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Feil under søk i temakatalog: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -552,12 +564,12 @@ msgstr ""
msgid "Error setting no tab popup status: %s\n"
msgstr "Feil under setting av status for popup uten faner: %s\n"
#: ../src/core/screen.c:623
#: ../src/core/screen.c:663
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/screen.c:639
#: ../src/core/screen.c:679
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -566,71 +578,71 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../src/core/screen.c:666
#: ../src/core/screen.c:706
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr ""
"Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n"
#: ../src/core/screen.c:721
#: ../src/core/screen.c:761
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
#: ../src/core/screen.c:906
#: ../src/core/screen.c:946
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Kunne ikke slippe skjerm %d på display «%s»\n"
#: ../src/core/session.c:837 ../src/core/session.c:844
#: ../src/core/session.c:843 ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Kunne ikke opprette katalog «%s»: %s\n"
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Kunne ikke åpne sesjonsfil «%s» for skriving: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Feil under skriving av sesjonsfil «%s»: %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Feil under lukking av sesjonsfil «%s»: %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Feil under tolking av lagret sesjonsfil: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "<mutter_session>-attributt sett men vi har allerede sesjons-ID"
#: ../src/core/session.c:1192 ../src/core/session.c:1267
#: ../src/core/session.c:1299 ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Ukjent attributt %s på <%s>-element"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "<window> tag med flere nivåer"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Ukjent element %s"
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@ -675,13 +687,13 @@ msgid "Window manager error: "
msgstr "Feil i vindushåndterer: "
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6795
#: ../src/core/window.c:6903
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -697,7 +709,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7458
#: ../src/core/window.c:7566
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -717,11 +729,16 @@ msgstr "Programmet satte en feil _NET_WM_PID %lu\n"
msgid "%s (on %s)"
msgstr "%s (på %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1488
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n"
#: ../src/core/window-props.c:1500
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n"
#: ../src/core/xprops.c:155
#, c-format
msgid ""
@ -766,7 +783,9 @@ msgstr ""
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr "Bestemmer om bytting mellom arbeidsområder skal skje for vinduer på alle skjermer eller kun på primær skjerm."
msgstr ""
"Bestemmer om bytting mellom arbeidsområder skal skje for vinduer på alle "
"skjermer eller kun på primær skjerm."
#: ../src/mutter.schemas.in.h:4
msgid "Live Hidden Windows"
@ -807,47 +826,47 @@ msgstr "Arbeidsområder kun på primær skjerm"
msgid "Usage: %s\n"
msgstr " Bruk: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1289
msgid "Close Window"
msgstr "Lukk vindu"
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1292
msgid "Window Menu"
msgstr "Vindumeny"
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1295
msgid "Minimize Window"
msgstr "Minimer vindu"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1298
msgid "Maximize Window"
msgstr "Maksimer vindu"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1301
msgid "Restore Window"
msgstr "Gjenopprett vindu"
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1304
msgid "Roll Up Window"
msgstr "Rull opp vindu"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1307
msgid "Unroll Window"
msgstr "Rull ned vindu"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1310
msgid "Keep Window On Top"
msgstr "Plasser vindu i forgrunnen"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1313
msgid "Remove Window From Top"
msgstr "Fjern vindu fra forgrunnen"
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1316
msgid "Always On Visible Workspace"
msgstr "Alltid på synlig arbeidsområde"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1319
msgid "Put Window On Only One Workspace"
msgstr "Plasser vindu kun på ett arbeidsområde"
@ -1050,48 +1069,69 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:252
msgid "top"
msgstr "topp"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:254
msgid "bottom"
msgstr "bunn"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:256
msgid "left"
msgstr "venstre"
#: ../src/ui/theme.c:261
#: ../src/ui/theme.c:258
msgid "right"
msgstr "høyre"
#: ../src/ui/theme.c:288
#: ../src/ui/theme.c:285
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon"
#: ../src/ui/theme.c:307
#: ../src/ui/theme.c:304
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»"
#: ../src/ui/theme.c:344
#: ../src/ui/theme.c:341
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Aspektrate %g for knapp er ikke fornuftig"
#: ../src/ui/theme.c:356
#: ../src/ui/theme.c:353
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper"
#: ../src/ui/theme.c:1064
#: ../src/ui/theme.c:1061
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Gradienter må ha minst to farger"
#: ../src/ui/theme.c:1202
#: ../src/ui/theme.c:1206
#, 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 "Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f.eks gtk:custom(foo,bar); kunne ikke lese «%s»"
#: ../src/ui/theme.c:1222
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
msgstr "Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er gyldig"
#: ../src/ui/theme.c:1236
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
msgstr "Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i formatet"
#: ../src/ui/theme.c:1272
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -1100,7 +1140,7 @@ msgstr ""
"GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor "
"NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1216
#: ../src/ui/theme.c:1286
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@ -1109,17 +1149,17 @@ msgstr ""
"GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. "
"gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1227
#: ../src/ui/theme.c:1297
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1240
#: ../src/ui/theme.c:1310
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1270
#: ../src/ui/theme.c:1340
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -1128,56 +1168,56 @@ msgstr ""
"Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
"formatet"
#: ../src/ui/theme.c:1281
#: ../src/ui/theme.c:1351
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
#: ../src/ui/theme.c:1291
#: ../src/ui/theme.c:1361
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0"
#: ../src/ui/theme.c:1338
#: ../src/ui/theme.c:1408
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
#: ../src/ui/theme.c:1349
#: ../src/ui/theme.c:1419
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
#: ../src/ui/theme.c:1359
#: ../src/ui/theme.c:1429
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
#: ../src/ui/theme.c:1388
#: ../src/ui/theme.c:1458
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Kunne ikke lese farge «%s»"
#: ../src/ui/theme.c:1646
#: ../src/ui/theme.c:1769
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
#: ../src/ui/theme.c:1673
#: ../src/ui/theme.c:1796
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
"parsed"
msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1687
#: ../src/ui/theme.c:1810
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1809
#: ../src/ui/theme.c:1932
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -1186,39 +1226,39 @@ msgstr ""
"Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
"teksten: «%s»"
#: ../src/ui/theme.c:1866
#: ../src/ui/theme.c:1989
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
#: ../src/ui/theme.c:2100 ../src/ui/theme.c:2110 ../src/ui/theme.c:2144
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Koordinatuttrykket resulterer i divisjon med null"
#: ../src/ui/theme.c:2029
#: ../src/ui/theme.c:2152
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
#: ../src/ui/theme.c:2085
#: ../src/ui/theme.c:2208
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
#: ../src/ui/theme.c:2094
#: ../src/ui/theme.c:2217
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
#: ../src/ui/theme.c:2102
#: ../src/ui/theme.c:2225
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
#: ../src/ui/theme.c:2112
#: ../src/ui/theme.c:2235
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1227,38 +1267,38 @@ msgstr ""
"Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
"operand mellom dem."
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
#: ../src/ui/theme.c:2386 ../src/ui/theme.c:2431
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
#: ../src/ui/theme.c:2362
#: ../src/ui/theme.c:2485
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
#: ../src/ui/theme.c:2391
#: ../src/ui/theme.c:2514
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
#: ../src/ui/theme.c:2455
#: ../src/ui/theme.c:2578
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
#: ../src/ui/theme.c:2466
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr ""
"Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
#: ../src/ui/theme.c:2801 ../src/ui/theme.c:2821 ../src/ui/theme.c:2841
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n"
#: ../src/ui/theme.c:4410
#: ../src/ui/theme.c:4512
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -1267,25 +1307,25 @@ msgstr ""
"<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
"spesifiseres for denne rammestilen"
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
#: ../src/ui/theme.c:5042 ../src/ui/theme.c:5067
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
#: ../src/ui/theme.c:5013
#: ../src/ui/theme.c:5115
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Klarte ikke å laste tema «%s»: %s\n"
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
#: ../src/ui/theme.c:5251 ../src/ui/theme.c:5258 ../src/ui/theme.c:5265
#: ../src/ui/theme.c:5272 ../src/ui/theme.c:5279
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "<%s> er ikke satt for tema «%s»"
#: ../src/ui/theme.c:5185
#: ../src/ui/theme.c:5287
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1294,14 +1334,14 @@ msgstr ""
"Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
"type=«%s» style_set=«ett-eller-annet»/>-element"
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
#: ../src/ui/theme.c:5737 ../src/ui/theme.c:5799 ../src/ui/theme.c:5862
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr ""
"Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det"
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
#: ../src/ui/theme.c:5745 ../src/ui/theme.c:5807 ../src/ui/theme.c:5870
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Konstant «%s» er allerede definert"
@ -1752,92 +1792,92 @@ msgstr "Dette er en eksempelbeskjed i en eksempeldialog"
msgid "Fake menu item %d\n"
msgstr "Falsk menyoppføring %d\n"
#: ../src/ui/theme-viewer.c:370
#: ../src/ui/theme-viewer.c:371
msgid "Border-only window"
msgstr "Vindu uten innhold"
#: ../src/ui/theme-viewer.c:372
#: ../src/ui/theme-viewer.c:373
msgid "Bar"
msgstr "Linje"
#: ../src/ui/theme-viewer.c:389
#: ../src/ui/theme-viewer.c:390
msgid "Normal Application Window"
msgstr "Normalt programvindu"
#: ../src/ui/theme-viewer.c:393
#: ../src/ui/theme-viewer.c:394
msgid "Dialog Box"
msgstr "Dialogboks"
#: ../src/ui/theme-viewer.c:397
#: ../src/ui/theme-viewer.c:398
msgid "Modal Dialog Box"
msgstr "Modal dialogboks"
#: ../src/ui/theme-viewer.c:401
#: ../src/ui/theme-viewer.c:402
msgid "Utility Palette"
msgstr "Verktøypalett"
#: ../src/ui/theme-viewer.c:405
#: ../src/ui/theme-viewer.c:406
msgid "Torn-off Menu"
msgstr "Avrevet meny"
#: ../src/ui/theme-viewer.c:409
#: ../src/ui/theme-viewer.c:410
msgid "Border"
msgstr "Kant"
#: ../src/ui/theme-viewer.c:413
#: ../src/ui/theme-viewer.c:414
msgid "Attached Modal Dialog"
msgstr "Festet modal dialog"
#: ../src/ui/theme-viewer.c:744
#: ../src/ui/theme-viewer.c:747
#, c-format
msgid "Button layout test %d"
msgstr "Test av knappeplassering %d"
#: ../src/ui/theme-viewer.c:773
#: ../src/ui/theme-viewer.c:776
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g millisekunder for å tegne en vindusramme"
#: ../src/ui/theme-viewer.c:818
#: ../src/ui/theme-viewer.c:821
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Bruk: metacity-theme-viewer [TEMANAVN]\n"
#: ../src/ui/theme-viewer.c:825
#: ../src/ui/theme-viewer.c:828
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Feil under lasting av tema: %s\n"
#: ../src/ui/theme-viewer.c:831
#: ../src/ui/theme-viewer.c:834
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Lastet tema «%s» på %g sekunder\n"
#: ../src/ui/theme-viewer.c:875
#: ../src/ui/theme-viewer.c:878
msgid "Normal Title Font"
msgstr "Normal tittelskrift"
#: ../src/ui/theme-viewer.c:881
#: ../src/ui/theme-viewer.c:884
msgid "Small Title Font"
msgstr "Liten tittelskrift"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:890
msgid "Large Title Font"
msgstr "Stor tittelskrift"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:895
msgid "Button Layouts"
msgstr "Knappeplasseringer"
#: ../src/ui/theme-viewer.c:897
#: ../src/ui/theme-viewer.c:900
msgid "Benchmark"
msgstr "Ytelsestest"
#: ../src/ui/theme-viewer.c:949
#: ../src/ui/theme-viewer.c:952
msgid "Window Title Goes Here"
msgstr "Vindutittel skal her"
#: ../src/ui/theme-viewer.c:1055
#: ../src/ui/theme-viewer.c:1058
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
@ -1848,39 +1888,39 @@ msgstr ""
"%g sekunder på klokken inklusive ressurser på X-tjener (%g millisekunder per "
"ramme)\n"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned TRUE but set error"
msgstr "test av posisjonsuttrykk returnerte TRUE, men satte en feilkode"
#: ../src/ui/theme-viewer.c:1276
#: ../src/ui/theme-viewer.c:1279
msgid "position expression test returned FALSE but didn't set error"
msgstr "test av posisjonsuttrykk returnerte FALSE, men satte ikke en feilkode"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1283
msgid "Error was expected but none given"
msgstr "Feil var ventet men ingen ble gitt"
#: ../src/ui/theme-viewer.c:1282
#: ../src/ui/theme-viewer.c:1285
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Feil %d var ventet men %d ble gitt"
#: ../src/ui/theme-viewer.c:1288
#: ../src/ui/theme-viewer.c:1291
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Feil ikke ventet men en ble returnert: %s"
#: ../src/ui/theme-viewer.c:1292
#: ../src/ui/theme-viewer.c:1295
#, c-format
msgid "x value was %d, %d was expected"
msgstr "x-verdi var %d, %d var ventet"
#: ../src/ui/theme-viewer.c:1295
#: ../src/ui/theme-viewer.c:1298
#, c-format
msgid "y value was %d, %d was expected"
msgstr "y-verdi var %d, %d var ventet"
#: ../src/ui/theme-viewer.c:1360
#: ../src/ui/theme-viewer.c:1363
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d koordinatuttrykk lest på %g sekunder (%g sekunder i snitt)\n"

315
po/sl.po
View File

@ -10,19 +10,26 @@ 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: 2011-03-22 10:13+0000\n"
"PO-Revision-Date: 2011-03-22 21:47+0100\n"
"POT-Creation-Date: 2011-07-13 21:26+0000\n"
"PO-Revision-Date: 2011-07-14 08:09+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
"X-Poedit-Language: Slovenian\n"
"X-Poedit-Country: SLOVENIA\n"
"X-Poedit-SourceCharset: utf-8\n"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:509
#, c-format
msgid "Another compositing manager is already running on screen %i on display \"%s\"."
msgstr "Drug upravljalnik sestavljanja je že zagnan na zaslonu %i prikaza \"%s\"."
#: ../src/core/all-keybindings.h:88
msgid "Switch to workspace 1"
msgstr "Preklopi na delovno površino 1"
@ -345,21 +352,24 @@ msgstr "Dogodek zvonjenja"
msgid "Unknown window information request: %d"
msgstr "Zahteva izpisa podrobnosti neznanega okna: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> se ne odziva."
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
msgid "Application is not responding."
msgstr "Program se ne odziva."
#: ../src/core/delete.c:119
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
msgstr "Lahko še malo počakate, če program morda spet začne delovati, ali pa vsilite končanje delovanja."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "_Počakaj"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "_Vsili konec"
@ -382,7 +392,7 @@ msgstr "Tipko %s s spremenilnikom %x uporablja že nek drug program\n"
#. Displayed when a keybinding which is
#. * supposed to launch a program fails.
#.
#: ../src/core/keybindings.c:2468
#: ../src/core/keybindings.c:2523
#, c-format
msgid ""
"There was an error running <tt>%s</tt>:\n"
@ -393,12 +403,12 @@ msgstr ""
"\n"
"%s"
#: ../src/core/keybindings.c:2558
#: ../src/core/keybindings.c:2613
#, c-format
msgid "No command %d has been defined.\n"
msgstr "Ukaz %d ni bil naveden.\n"
#: ../src/core/keybindings.c:3570
#: ../src/core/keybindings.c:3625
#, c-format
msgid "No terminal command has been defined.\n"
msgstr "Ni navedenih ukazov terminala.\n"
@ -427,12 +437,12 @@ msgstr "Začni sejo iz shranjene datoteke"
msgid "Make X calls synchronous"
msgstr "Uskladi klice X"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Ni mogoče preiskati mape tem: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "Ni mogoče najti teme! Prepričajte se, da %s obstaja in vsebuje običajni zapis teme.\n"
@ -551,84 +561,84 @@ msgstr "Napaka med nastavljanjem stanja skritih oken: %s\n"
msgid "Error setting no tab popup status: %s\n"
msgstr "Napaka med nastavljanjem stanja pojavnih oken: %s\n"
#: ../src/core/screen.c:623
#: ../src/core/screen.c:663
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Zaslon %d na prikazu '%s' ni veljaven\n"
#: ../src/core/screen.c:639
#: ../src/core/screen.c:679
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n"
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken; poskušajte uporabiti možnost --replace za zamenjavo trenutnega.\n"
#: ../src/core/screen.c:666
#: ../src/core/screen.c:706
#, c-format
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "Ni mogoče dobiti izbire upravljalnika oken na zaslonu %d prikaza \"%s\"\n"
#: ../src/core/screen.c:721
#: ../src/core/screen.c:761
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken\n"
#: ../src/core/screen.c:906
#: ../src/core/screen.c:946
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Ni mogoče opustiti zaslona %d na prikazu \"%s\"\n"
#: ../src/core/session.c:837
#: ../src/core/session.c:844
#: ../src/core/session.c:843
#: ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Ni mogoče ustvariti imenika '%s': %s\n"
# G:2 K:0 O:0
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Ni mogoče odpreti datoteke seje '%s' za pisanje: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Napaka med zapisovanjem datoteke seje '%s': %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Napaka med zapiranjem datoteke seje '%s': %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Ni mogoče razčleniti datoteke shranjene seje: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "atribut <mutter_session> je zaznan, vendar pa ima sistem že določen ID seje"
#: ../src/core/session.c:1192
#: ../src/core/session.c:1267
#: ../src/core/session.c:1299
#: ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198
#: ../src/core/session.c:1273
#: ../src/core/session.c:1305
#: ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Neznan atribut %s predmeta <%s>"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "gnezdena označba <window>"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Neznan predmet %s"
# G:2 K:6 O:0
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid "These windows do not support &quot;save current setup&quot; and will have to be restarted manually next time you log in."
msgstr "Ta okna ne podpirajo možnosti &quot;shranjevanja trenutnih nastavitev&quot;, zato jih bo treba ob naslednji prijavi zagnati ročno."
@ -671,14 +681,14 @@ msgid "Window manager error: "
msgstr "Napaka upravljalnika oken: "
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615
#: ../src/core/util.c:632
#: ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6795
#: ../src/core/window.c:6903
#, c-format
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LEADER kot je zavedeno v ICCCM.\n"
@ -690,7 +700,7 @@ msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LE
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7458
#: ../src/core/window.c:7566
#, c-format
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "Okno %s določi namig MWM, ki pove, da ni mogoče spremeniti velikosti, hkrati pa določi najmanjšo velikost na %d x %d in največjo na %d x %d; vrednost ni smiselna.\n"
@ -705,11 +715,16 @@ msgstr "Program je nastavil pokvarjen _NET_WM_PID %lu\n"
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1488
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Neveljaven WM_TRANSIENT_FOR za okno 0x%lx naveden za %s.\n"
#: ../src/core/window-props.c:1500
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Predmet WM_TRANSIENT_FOR okna 0x%lx za %s lahko ustvari zanko.\n"
#: ../src/core/xprops.c:155
#, c-format
msgid ""
@ -772,51 +787,51 @@ msgstr "Delovne površine le na prvem zaslonu"
msgid "Usage: %s\n"
msgstr "Uporaba: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1289
msgid "Close Window"
msgstr "Zapri okno"
# G:1 K:1 O:0
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1292
msgid "Window Menu"
msgstr "Meni okna"
# G:0 K:1 O:0
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1295
msgid "Minimize Window"
msgstr "Skrči okno"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1298
msgid "Maximize Window"
msgstr "Razpni okno"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1301
msgid "Restore Window"
msgstr "Obnovi okno"
# G:2 K:0 O:0
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1304
msgid "Roll Up Window"
msgstr "Zavij okno"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1307
msgid "Unroll Window"
msgstr "Odvij okno"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1310
msgid "Keep Window On Top"
msgstr "Ohrani okno na vrhu"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1313
msgid "Remove Window From Top"
msgstr "Odstrani okno z vrha"
# G:1 K:0 O:0
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1316
msgid "Always On Visible Workspace"
msgstr "Vedno na vidni delovni površini"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1319
msgid "Put Window On Only One Workspace"
msgstr "Postavi okno na samo eno delovno površino"
@ -1038,236 +1053,251 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:252
msgid "top"
msgstr "zgoraj"
# G:12 K:5 O:0
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:254
msgid "bottom"
msgstr "spodaj"
# G:10 K:4 O:0
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:256
msgid "left"
msgstr "levo"
# G:1 K:0 O:0
#: ../src/ui/theme.c:261
#: ../src/ui/theme.c:258
msgid "right"
msgstr "desno"
# G:1 K:0 O:0
#: ../src/ui/theme.c:288
#: ../src/ui/theme.c:285
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "geometrija okvirja ne navaja dimenzije \"%s\""
#: ../src/ui/theme.c:307
#: ../src/ui/theme.c:304
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "geometrija okvirja ne navaja dimenzije \"%s\" za rob \"%s\""
#: ../src/ui/theme.c:344
#: ../src/ui/theme.c:341
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Vrednost razmerja gumba %g ni smiselna"
#: ../src/ui/theme.c:356
#: ../src/ui/theme.c:353
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Geometrija okvirja ne navaja velikosti gumbov"
#: ../src/ui/theme.c:1064
#: ../src/ui/theme.c:1061
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Prelivi bi morali imeti vsaj dve barvi"
#: ../src/ui/theme.c:1202
#: ../src/ui/theme.c:1206
#, 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 "Navedba barve GTK mora biti opredeljena z imenom barve in v navednicah povrnjeno barvo , npr. gtk:izbirno(ime_barve,povrnjena_barva); ni mogoče razčleniti \"%s\""
#: ../src/ui/theme.c:1222
#, c-format
msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
msgstr "Neveljaven znak '%c' v imenu barve gtk:izbirno; dovoljeni znaki so le A-Za-z0-9-_."
#: ../src/ui/theme.c:1236
#, c-format
msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
msgstr "Gtk:zapis po meri \"gtk:izbirno(ime_barve,povrnjena_barva)\", \"%s\" ne ustreza pravilni obliki."
#: ../src/ui/theme.c:1272
#, c-format
msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "Navedba barve GTK mora vsebovati stanje v oglatih oklepajih, npr. gtk:fg[NORMAL], kjer je NORMAL stanje; ni mogoče razčleniti \"%s\""
#: ../src/ui/theme.c:1216
#: ../src/ui/theme.c:1286
#, c-format
msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "Navedbi barve GTK manjka oglati zaklepaj za stanjem, npr. gtk:fg[NORMAL], kjer je NORMAL stanje; ni mogoče razčleniti \"%s\""
#: ../src/ui/theme.c:1227
#: ../src/ui/theme.c:1297
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Ni mogoče razumeti stanja \"%s\" v navedbi barve "
#: ../src/ui/theme.c:1240
#: ../src/ui/theme.c:1310
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Ni mogoče razumeti barvne komponente \"%s\" v navedbi barve"
#: ../src/ui/theme.c:1270
#: ../src/ui/theme.c:1340
#, c-format
msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
msgstr "Oblika zapisa preliva je \"blend/bg_color/fg_color/alpha\", \"%s\" ne ustreza pravilni obliki"
#: ../src/ui/theme.c:1281
#: ../src/ui/theme.c:1351
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "V prelivni barvi ni mogoče razčleniti vrednosti alfa \"%s\""
#: ../src/ui/theme.c:1291
#: ../src/ui/theme.c:1361
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "V prelivni barvi alfa vrednost \"%s\" ni med 0.0 in 1.0"
#: ../src/ui/theme.c:1338
#: ../src/ui/theme.c:1408
#, c-format
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "Oblika zapisa barve senčenja je \"shade/base_color/factor\", \"%s\" ne ustreza pravilni obliki."
#: ../src/ui/theme.c:1349
#: ../src/ui/theme.c:1419
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Ni mogoče razčleniti vrednosti senčenja \"%s\" v senčeni barvi"
#: ../src/ui/theme.c:1359
#: ../src/ui/theme.c:1429
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "V senčeni barvi je vrednost senčenja \"%s\" negativna"
#: ../src/ui/theme.c:1388
#: ../src/ui/theme.c:1458
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Ni mogoče razčleniti barve \"%s\""
#: ../src/ui/theme.c:1646
#: ../src/ui/theme.c:1769
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Izraz koordinat vsebuje znak '%s', ki pa ni dovoljen"
#: ../src/ui/theme.c:1673
#: ../src/ui/theme.c:1796
#, c-format
msgid "Coordinate expression contains floating point number '%s' which could not be parsed"
msgstr "Izraz koordinat vsebuje številko s plavajočo vejico '%s', ki je ni mogoče razčleniti"
#: ../src/ui/theme.c:1687
#: ../src/ui/theme.c:1810
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Izraz koordinat vsebuje celo število '%s', ki ga ni mogoče razčleniti"
#: ../src/ui/theme.c:1809
#: ../src/ui/theme.c:1932
#, c-format
msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\""
msgstr "Izraz koordinat vsebuje neznan operator na začetku besedila: \"%s\""
#: ../src/ui/theme.c:1866
#: ../src/ui/theme.c:1989
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Izraz koordinat je prazen ali pa ni v razumljivem zapisu"
#: ../src/ui/theme.c:1977
#: ../src/ui/theme.c:1987
#: ../src/ui/theme.c:2021
#: ../src/ui/theme.c:2100
#: ../src/ui/theme.c:2110
#: ../src/ui/theme.c:2144
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Izraz koordinat povzroči deljenje z vrednostjo nič"
#: ../src/ui/theme.c:2029
#: ../src/ui/theme.c:2152
#, c-format
msgid "Coordinate expression tries to use mod operator on a floating-point number"
msgstr "Izraz koordinat poskuša uporabiti operator mod ali številko s plavajočo vejico"
#: ../src/ui/theme.c:2085
#: ../src/ui/theme.c:2208
#, c-format
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Izraz koordinat vsebuje operator \"%s\", kjer je pričakovan operand"
#: ../src/ui/theme.c:2094
#: ../src/ui/theme.c:2217
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Izraz koordinat vsebuje operand kjer je pričakovan operator"
#: ../src/ui/theme.c:2102
#: ../src/ui/theme.c:2225
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Izraz koordinat se konča z operatorjem namesto z operandom"
#: ../src/ui/theme.c:2112
#: ../src/ui/theme.c:2235
#, c-format
msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
msgstr "Izraz koordinat vsebuje operator \"%c\", ki sledi operatorju \"%c\", brez vmesnega operanda"
#: ../src/ui/theme.c:2263
#: ../src/ui/theme.c:2308
#: ../src/ui/theme.c:2386
#: ../src/ui/theme.c:2431
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Izraz koordinat vsebuje neznano spremenljivko ali konstanto \"%s\""
#: ../src/ui/theme.c:2362
#: ../src/ui/theme.c:2485
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Razčlenjevalnik izrazov koordinat je preplavil medpomnilnik."
#: ../src/ui/theme.c:2391
#: ../src/ui/theme.c:2514
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Izraz koordinat vsebuje zaklepaj, ne pa tudi uklepaja"
#: ../src/ui/theme.c:2455
#: ../src/ui/theme.c:2578
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Izraz koordinat vsebuje uklepaj, vendar je brez zaklepaja"
#: ../src/ui/theme.c:2466
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "Videti je, da izraz koordinat ne vsebuje operatorjev ali operandov"
#: ../src/ui/theme.c:2676
#: ../src/ui/theme.c:2696
#: ../src/ui/theme.c:2716
#: ../src/ui/theme.c:2801
#: ../src/ui/theme.c:2821
#: ../src/ui/theme.c:2841
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tema vsebuje izraz, ki povzroča napako: %s\n"
#: ../src/ui/theme.c:4410
#: ../src/ui/theme.c:4512
#, c-format
msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
msgstr "Za ta slog okvirja mora biti naveden <button function=\"%s\" state=\"%s\" draw_ops=\"karkoli\"/>"
#: ../src/ui/theme.c:4940
#: ../src/ui/theme.c:4965
#: ../src/ui/theme.c:5042
#: ../src/ui/theme.c:5067
#, c-format
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "Manjka <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"karkoli\"/>"
#: ../src/ui/theme.c:5013
#: ../src/ui/theme.c:5115
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Napaka med nalaganjem teme \"%s\": %s\n"
#: ../src/ui/theme.c:5149
#: ../src/ui/theme.c:5156
#: ../src/ui/theme.c:5163
#: ../src/ui/theme.c:5170
#: ../src/ui/theme.c:5177
#: ../src/ui/theme.c:5251
#: ../src/ui/theme.c:5258
#: ../src/ui/theme.c:5265
#: ../src/ui/theme.c:5272
#: ../src/ui/theme.c:5279
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "Ni nastavljena vrednost <%s> za temo \"%s\""
#: ../src/ui/theme.c:5185
#: ../src/ui/theme.c:5287
#, c-format
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
msgstr "Ni določenega sloga okvirja okna vrste \"%s\" v temi \"%s\". Dodajte predmet <window type=\"%s\" style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5635
#: ../src/ui/theme.c:5697
#: ../src/ui/theme.c:5760
#: ../src/ui/theme.c:5737
#: ../src/ui/theme.c:5799
#: ../src/ui/theme.c:5862
#, c-format
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr "Uporabniško določene konstante se morajo začeti z veliko črko; vrednost \"%s\" se ne"
#: ../src/ui/theme.c:5643
#: ../src/ui/theme.c:5705
#: ../src/ui/theme.c:5768
#: ../src/ui/theme.c:5745
#: ../src/ui/theme.c:5807
#: ../src/ui/theme.c:5870
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Konstanta \"%s\" je že določena"
@ -1709,154 +1739,167 @@ msgstr "To je preizkusno sporočilo v pogovornem oknu"
msgid "Fake menu item %d\n"
msgstr "Lažni predmet menija %d\n"
#: ../src/ui/theme-viewer.c:370
#: ../src/ui/theme-viewer.c:371
msgid "Border-only window"
msgstr "Okno samo z okvirjem"
#: ../src/ui/theme-viewer.c:372
#: ../src/ui/theme-viewer.c:373
msgid "Bar"
msgstr "Vrstica"
#: ../src/ui/theme-viewer.c:389
#: ../src/ui/theme-viewer.c:390
msgid "Normal Application Window"
msgstr "Običajno okno programa"
#: ../src/ui/theme-viewer.c:393
#: ../src/ui/theme-viewer.c:394
msgid "Dialog Box"
msgstr "Pogovorno okno"
#: ../src/ui/theme-viewer.c:397
#: ../src/ui/theme-viewer.c:398
msgid "Modal Dialog Box"
msgstr "Modalno pogovorno okno"
#: ../src/ui/theme-viewer.c:401
#: ../src/ui/theme-viewer.c:402
msgid "Utility Palette"
msgstr "Paleta pripomočkov"
#: ../src/ui/theme-viewer.c:405
#: ../src/ui/theme-viewer.c:406
msgid "Torn-off Menu"
msgstr "Odtrgan meni"
#: ../src/ui/theme-viewer.c:409
#: ../src/ui/theme-viewer.c:410
msgid "Border"
msgstr "Okvir"
#: ../src/ui/theme-viewer.c:413
#: ../src/ui/theme-viewer.c:414
msgid "Attached Modal Dialog"
msgstr "Pripeto modalno okno"
#: ../src/ui/theme-viewer.c:744
#: ../src/ui/theme-viewer.c:747
#, c-format
msgid "Button layout test %d"
msgstr "Preizkus razporeditve gumbov %d"
#: ../src/ui/theme-viewer.c:773
#: ../src/ui/theme-viewer.c:776
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g milisekund za risanje ene sličice okna"
#: ../src/ui/theme-viewer.c:818
#: ../src/ui/theme-viewer.c:821
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Uporaba: metacity-theme-viewer [IMETEME]\n"
#: ../src/ui/theme-viewer.c:825
#: ../src/ui/theme-viewer.c:828
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Napaka med nalaganjem teme: %s\n"
#: ../src/ui/theme-viewer.c:831
#: ../src/ui/theme-viewer.c:834
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Tema \"%s\" naložena v %g sekundah\n"
#: ../src/ui/theme-viewer.c:875
#: ../src/ui/theme-viewer.c:878
msgid "Normal Title Font"
msgstr "Običajna pisava naziva"
#: ../src/ui/theme-viewer.c:881
#: ../src/ui/theme-viewer.c:884
msgid "Small Title Font"
msgstr "Majhna pisava naziva"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:890
msgid "Large Title Font"
msgstr "Velika pisava naziva"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:895
msgid "Button Layouts"
msgstr "Razpored gumbov"
#: ../src/ui/theme-viewer.c:897
#: ../src/ui/theme-viewer.c:900
msgid "Benchmark"
msgstr "Meritev"
#: ../src/ui/theme-viewer.c:949
#: ../src/ui/theme-viewer.c:952
msgid "Window Title Goes Here"
msgstr "Tukaj je izpisan naziv okna"
#: ../src/ui/theme-viewer.c:1055
#: ../src/ui/theme-viewer.c:1058
#, c-format
msgid "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g seconds wall clock time including X server resources (%g milliseconds per frame)\n"
msgstr "Izrisanih %d sličic v %g sekundah odjemalca (%g milisekund na sličico) in %g sekund v času stenske ure, upoštevajoč sredstva strežnika X (%g milisekund na sličico)\n"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned TRUE but set error"
msgstr "preizkus izjave položaja je vrnil logični PRAV, vendar je določil tudi napako"
#: ../src/ui/theme-viewer.c:1276
#: ../src/ui/theme-viewer.c:1279
msgid "position expression test returned FALSE but didn't set error"
msgstr "preizkus izjave položaja je vrnil logični NAPAK in ni določil napake"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1283
msgid "Error was expected but none given"
msgstr "Pričakovana je napaka, vendar ni odziva"
#: ../src/ui/theme-viewer.c:1282
#: ../src/ui/theme-viewer.c:1285
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Pričakovana je napaka %d, vrnjena pa je bila %d"
#: ../src/ui/theme-viewer.c:1288
#: ../src/ui/theme-viewer.c:1291
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Napaka ni pričakovana, vendar je vrnjen odziv: %s"
#: ../src/ui/theme-viewer.c:1292
#: ../src/ui/theme-viewer.c:1295
#, c-format
msgid "x value was %d, %d was expected"
msgstr "vrednost x je %d, pričakovana pa je %d"
#: ../src/ui/theme-viewer.c:1295
#: ../src/ui/theme-viewer.c:1298
#, c-format
msgid "y value was %d, %d was expected"
msgstr "vrednost y je %d, pričakovana pa je %d"
#: ../src/ui/theme-viewer.c:1360
#: ../src/ui/theme-viewer.c:1363
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d izjav koordinat razčlenjenih v %g sekundah (%g sekund v povprečju)\n"
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
#~ msgstr "Pridobivanje barve %s[%s] iz teme GTK+ je spodletelo.\n"
#~ msgid "Turn compositing on"
#~ msgstr "Vključi skladanje"
#~ msgid "Turn compositing off"
#~ msgstr "Izključi skladanje"
#~ msgid ""
#~ "Don't make fullscreen windows that are maximized and have no decorations"
#~ msgstr "Ne ustvari celozaslonskih oken, ki so razpeti in nimajo gumbov"
#~ msgid "Whether window popup/frame should be shown when cycling windows."
#~ msgstr "Ali naj bo prikazan okvir okna med kroženjem oken."
#~ msgid "Internal argument for GObject introspection"
#~ msgstr "Notranji argument za GObject"
#~ msgid "Failed to restart: %s\n"
#~ msgstr "Spodletelo začenjanje: %s\n"
#~ msgid "Error setting compositor status: %s\n"
#~ msgstr "Napaka med nastavljanjem stanja skladanja: %s\n"
#~ msgid "Error setting clutter plugin list: %s\n"
#~ msgstr "Napaka med nastavljanjem seznama vstavkov clutter: %s\n"
#~ msgid "Clutter Plugins"
#~ msgstr "Vstavki Clutter"
#~ msgid "Plugins to load for the Clutter-based compositing manager."
#~ msgstr "Vstavki za Clutter upravljalnik sestavljanja"
#~ msgid ""
#~ "Lost connection to the display '%s';\n"
#~ "most likely the X server was shut down or you killed/destroyed\n"
@ -1865,6 +1908,6 @@ msgstr "%d izjav koordinat razčlenjenih v %g sekundah (%g sekund v povprečju)\
#~ "Izgubljena povezava z zaslonom '%s';\n"
#~ "najverjetneje se je strežnik X končal ali pa je vsiljeno izklopljen\n"
#~ "upravljalnik oken.\n"
#~ msgid "Fatal IO error %d (%s) on display '%s'.\n"
#~ msgstr "Usodna napaka VI %d (%s) na zaslonu '%s'.\n"

1316
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2629
po/tr.po

File diff suppressed because it is too large Load Diff

562
po/ug.po

File diff suppressed because it is too large Load Diff

View File

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-23 15:51+0200\n"
"PO-Revision-Date: 2011-03-23 15:52+0300\n"
"POT-Creation-Date: 2011-05-03 22:43+0300\n"
"PO-Revision-Date: 2011-05-03 22:46+0300\n"
"Last-Translator: Korostil Daniel <ted.korostiled@gmail.com>\n"
"Language-Team: translation@linux.org.ua\n"
"Language: uk\n"
@ -337,24 +337,27 @@ msgstr "Подія гудка"
msgid "Unknown window information request: %d"
msgstr "Запит інформації невідомого вікна: %d"
#. Translators: %s is a window title
#: ../src/core/delete.c:94
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> не відповідає."
#: ../src/core/delete.c:99
#: ../src/core/delete.c:114
msgid "Application is not responding."
msgstr "Програма не відповідає."
#: ../src/core/delete.c:119
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Можете трошки зачекати відновлення активності або примусово закрити програму."
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Wait"
msgstr "_Зачекати"
#: ../src/core/delete.c:108
#: ../src/core/delete.c:126
msgid "_Force Quit"
msgstr "_Завершити примусово"
@ -423,12 +426,12 @@ msgstr "Розпочати сеанс зі збереженого файла"
msgid "Make X calls synchronous"
msgstr "Зробити виклики X синхронними"
#: ../src/core/main.c:506
#: ../src/core/main.c:504
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Помилка зчитування каталогу тем: %s\n"
#: ../src/core/main.c:522
#: ../src/core/main.c:520
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -553,12 +556,12 @@ msgstr "Помилка налаштування стану схованих ві
msgid "Error setting no tab popup status: %s\n"
msgstr "Помилка налаштування стану контекстних вкладок: %s\n"
#: ../src/core/screen.c:623
#: ../src/core/screen.c:624
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Екран %d на дисплеї «%s» не правильний\n"
#: ../src/core/screen.c:639
#: ../src/core/screen.c:640
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -567,7 +570,7 @@ msgstr ""
"Екран %d на дисплеї «%s» вже має менеджера вікон; спробуйте вказати параметр "
"--replace, щоб замінити поточний менеджер вікон.\n"
#: ../src/core/screen.c:666
#: ../src/core/screen.c:667
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@ -575,64 +578,64 @@ msgstr ""
"Не вдалось одержати функцію виділення менеджеру вікон на екрані %d дисплею "
"«%s»\n"
#: ../src/core/screen.c:721
#: ../src/core/screen.c:722
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Екран %d на дисплеї «%s» вже має менеджера вікон\n"
#: ../src/core/screen.c:906
#: ../src/core/screen.c:907
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Не вдалось відпустити екран %d на дисплеї «%s»\n"
#: ../src/core/session.c:837 ../src/core/session.c:844
#: ../src/core/session.c:843 ../src/core/session.c:850
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Не вдалось створити каталог «%s»: %s\n"
#: ../src/core/session.c:854
#: ../src/core/session.c:860
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Не вдалось відкрити для запису файл сеансу «%s»: %s\n"
#: ../src/core/session.c:995
#: ../src/core/session.c:1001
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Помилка запису файла сеансу \"%s\": %s\n"
#: ../src/core/session.c:1000
#: ../src/core/session.c:1006
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Помилка закриття файла сеансу «%s»: %s\n"
#: ../src/core/session.c:1130
#: ../src/core/session.c:1136
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Збій аналізування збереженого файла сеансу: %s\n"
#: ../src/core/session.c:1179
#: ../src/core/session.c:1185
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "Прочитано атрибут <mutter_session>, але вже є ідентифікатор сеансу"
#: ../src/core/session.c:1192 ../src/core/session.c:1267
#: ../src/core/session.c:1299 ../src/core/session.c:1371
#: ../src/core/session.c:1431
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
#: ../src/core/session.c:1437
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Невідомий атрибут %s у елементі <%s>"
#: ../src/core/session.c:1209
#: ../src/core/session.c:1215
#, c-format
msgid "nested <window> tag"
msgstr "вкладена мітка <window>"
#: ../src/core/session.c:1451
#: ../src/core/session.c:1457
#, c-format
msgid "Unknown element %s"
msgstr "Невідомий елемент %s"
#: ../src/core/session.c:1803
#: ../src/core/session.c:1809
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@ -677,13 +680,13 @@ msgid "Window manager error: "
msgstr "Помилка віконного менеджера:"
#. Translators: This is the title used on dialog boxes
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
#: ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#. first time through
#: ../src/core/window.c:6795
#: ../src/core/window.c:6860
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -699,7 +702,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7458
#: ../src/core/window.c:7523
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -719,7 +722,7 @@ msgstr "Програма встановила неправильне значе
msgid "%s (on %s)"
msgstr "%s (на %s)"
#: ../src/core/window-props.c:1479
#: ../src/core/window-props.c:1482
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Неправильний параметр WM_TRANSIENT_FOR вікна 0x%lx вказано для %s.\n"
@ -810,47 +813,47 @@ msgstr "Робочий простір лише на первинному"
msgid "Usage: %s\n"
msgstr "Використання: %s\n"
#: ../src/ui/frames.c:1099
#: ../src/ui/frames.c:1177
msgid "Close Window"
msgstr "Закрити вікно"
#: ../src/ui/frames.c:1102
#: ../src/ui/frames.c:1180
msgid "Window Menu"
msgstr "Меню вікна"
#: ../src/ui/frames.c:1105
#: ../src/ui/frames.c:1183
msgid "Minimize Window"
msgstr "Згорнути вікно"
#: ../src/ui/frames.c:1108
#: ../src/ui/frames.c:1186
msgid "Maximize Window"
msgstr "Розгорнути вікно"
#: ../src/ui/frames.c:1111
#: ../src/ui/frames.c:1189
msgid "Restore Window"
msgstr "Відновити вікно"
#: ../src/ui/frames.c:1114
#: ../src/ui/frames.c:1192
msgid "Roll Up Window"
msgstr "Скотити вікно"
#: ../src/ui/frames.c:1117
#: ../src/ui/frames.c:1195
msgid "Unroll Window"
msgstr "Розкотити вікно"
#: ../src/ui/frames.c:1120
#: ../src/ui/frames.c:1198
msgid "Keep Window On Top"
msgstr "Тримати вікно нагорі"
#: ../src/ui/frames.c:1123
#: ../src/ui/frames.c:1201
msgid "Remove Window From Top"
msgstr "Прибрати вікно з гори"
#: ../src/ui/frames.c:1126
#: ../src/ui/frames.c:1204
msgid "Always On Visible Workspace"
msgstr "Завжди на видимому робочому просторі"
#: ../src/ui/frames.c:1129
#: ../src/ui/frames.c:1207
msgid "Put Window On Only One Workspace"
msgstr "Розміщувати вікно лише на одному робочому просторі"

View File

@ -709,9 +709,8 @@ msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
"d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr ""
"Cửa sổ %s gọi ý MWM nói rằng nó không thể bị thay đổi kích thước, nhưng đặt "
"kích thước tối thiểu %d x %d và tối đa %d x %d; điều này có vẻ cũng hơi hợp "
"lý.\n"
"Cửa sổ %s đặt gợi ý MWM rằng nó không thể bị thay đổi kích thước, nhưng đặt "
"kích thước tối thiểu %d x %d và tối đa %d x %d; không hợp lý lắm.\n"
#: ../src/core/window-props.c:309
#, c-format

View File

@ -55,6 +55,8 @@ libmutter_la_SOURCES = \
compositor/meta-shadow-factory-private.h \
compositor/meta-shaped-texture.c \
compositor/meta-shaped-texture.h \
compositor/meta-texture-rectangle.c \
compositor/meta-texture-rectangle.h \
compositor/meta-texture-tower.c \
compositor/meta-texture-tower.h \
compositor/meta-window-actor.c \
@ -204,7 +206,11 @@ mutter_LDADD = $(MUTTER_LIBS) libmutter.la
if HAVE_INTROSPECTION
include $(INTROSPECTION_MAKEFILE)
api_version = $(MUTTER_MAJOR_VERSION).$(MUTTER_MINOR_VERSION)
# Since we don't make any guarantees about stability and we don't support
# parallel install, there's no real reason to change directories, filenames,
# etc. as we change the Mutter tarball version.
#api_version = $(MUTTER_MAJOR_VERSION).$(MUTTER_MINOR_VERSION)
api_version = 3.0
# These files are in package-private directories, even though they may be used
# by plugins. If you're writing a plugin, use g-ir-compiler --add-include-path
@ -332,7 +338,7 @@ mutter-enum-types.h: stamp-mutter-enum-types.h Makefile
stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.in
$(AM_V_GEN) ( cd $(srcdir) && \
$(GLIB_MKENUMS) \
--template $(srcdir)/mutter-enum-types.h.in \
--template mutter-enum-types.h.in \
$(libmutterinclude_base_headers) ) >> xgen-teth && \
(cmp -s xgen-teth mutter-enum-types.h || cp xgen-teth mutter-enum-types.h) && \
rm -f xgen-teth && \
@ -341,7 +347,7 @@ stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.
mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in
$(AM_V_GEN) ( cd $(srcdir) && \
$(GLIB_MKENUMS) \
--template $(srcdir)/mutter-enum-types.c.in \
--template mutter-enum-types.c.in \
$(libmutterinclude_base_headers) ) >> xgen-tetc && \
cp xgen-tetc mutter-enum-types.c && \
rm -f xgen-tetc

View File

@ -29,6 +29,10 @@
* @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
* repeat can't be used for a sliced texture.
*
* Creates a texture that is a single pixel with the specified
* unpremultiplied color components.
@ -36,10 +40,11 @@
* Return value: (transfer full): a newly created Cogl texture
*/
CoglHandle
meta_create_color_texture_4ub (guint8 red,
guint8 green,
guint8 blue,
guint8 alpha)
meta_create_color_texture_4ub (guint8 red,
guint8 green,
guint8 blue,
guint8 alpha,
CoglTextureFlags flags)
{
CoglColor color;
guint8 pixel[4];
@ -53,7 +58,7 @@ meta_create_color_texture_4ub (guint8 red,
pixel[3] = cogl_color_get_alpha_byte (&color);
return cogl_texture_new_from_data (1, 1,
COGL_TEXTURE_NONE,
flags,
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
COGL_PIXEL_FORMAT_ANY,
4, pixel);
@ -88,7 +93,8 @@ meta_create_texture_material (CoglHandle src_texture)
{
CoglHandle dummy_texture;
dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff);
dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff,
COGL_TEXTURE_NONE);
texture_material_template = cogl_material_new ();
cogl_material_set_layer (texture_material_template, 0, dummy_texture);

View File

@ -25,10 +25,11 @@
#include <cogl/cogl.h>
CoglHandle meta_create_color_texture_4ub (guint8 red,
guint8 green,
guint8 blue,
guint8 alpha);
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__ */

View File

@ -11,6 +11,7 @@
#include <meta/compositor-mutter.h>
#include "xprops.h"
#include <meta/prefs.h>
#include <meta/main.h>
#include <meta/meta-shadow-factory.h>
#include "meta-window-actor-private.h"
#include "meta-window-group.h"
@ -474,20 +475,43 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
gint width, height;
XWindowAttributes attr;
long event_mask;
guint n_retries;
guint max_retries;
/* Check if the screen is already managed */
if (meta_screen_get_compositor_data (screen))
return;
meta_error_trap_push_with_return (display);
XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
XSync (xdisplay, FALSE);
if (meta_get_replace_current_wm ())
max_retries = 5;
else
max_retries = 1;
if (meta_error_trap_pop_with_return (display))
n_retries = 0;
/* Some compositors (like old versions of Mutter) might not properly unredirect
* subwindows before destroying the WM selection window; so we wait a while
* for such a compositor to exit before giving up.
*/
while (TRUE)
{
g_warning ("Another compositing manager is running on screen %i",
screen_number);
return;
meta_error_trap_push_with_return (display);
XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
XSync (xdisplay, FALSE);
if (!meta_error_trap_pop_with_return (display))
break;
if (n_retries == max_retries)
{
/* This probably means that a non-WM compositor like xcompmgr is running;
* we have no way to get it to exit */
meta_fatal (_("Another compositing manager is already running on screen %i on display \"%s\"."),
screen_number, display->name);
}
n_retries++;
g_usleep (G_USEC_PER_SEC);
}
info = g_new0 (MetaCompScreen, 1);
@ -587,6 +611,14 @@ void
meta_compositor_unmanage_screen (MetaCompositor *compositor,
MetaScreen *screen)
{
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdisplay = meta_display_get_xdisplay (display);
Window xroot = meta_screen_get_xroot (screen);
/* This is the most important part of cleanup - we have to do this
* before giving up the window manager selection or the next
* window manager won't be able to redirect subwindows */
XCompositeUnredirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
}
void

View File

@ -113,8 +113,13 @@ set_texture_to_stage_color (MetaBackgroundActor *self)
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);
color.blue, 0xff,
COGL_TEXTURE_NO_SLICING);
set_texture (self, texture);
cogl_handle_unref (texture);
}
@ -228,7 +233,6 @@ meta_background_actor_paint (ClutterActor *actor)
}
}
#if CLUTTER_CHECK_VERSION(1, 5, 2)
static gboolean
meta_background_actor_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
@ -243,7 +247,6 @@ meta_background_actor_get_paint_volume (ClutterActor *actor,
return TRUE;
}
#endif
static void
meta_background_actor_class_init (MetaBackgroundActorClass *klass)
@ -256,9 +259,7 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass)
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

View File

@ -47,7 +47,8 @@ void meta_shadow_paint (MetaShadow *shadow,
int window_width,
int window_height,
guint8 opacity,
cairo_region_t *clip);
cairo_region_t *clip,
gboolean clip_strictly);
void meta_shadow_get_bounds (MetaShadow *shadow,
int window_x,
int window_y,

View File

@ -120,17 +120,17 @@ static guint signals[LAST_SIGNAL] = { 0 };
/* The first element in this array also defines the default parameters
* for newly created classes */
MetaShadowClassInfo default_shadow_classes[] = {
{ "normal", { 12, -1, 0, 8, 255 }, { 6, -1, 0, 4, 255 } },
{ "dialog", { 12, -1, 0, 8, 255 }, { 6, -1, 0, 4, 255 } },
{ "modal_dialog", { 12, -1, 0, 8, 255 }, { 6, -1, 0, 4, 255 } },
{ "utility", { 12, -1, 0, 8, 255 }, { 6, -1, 0, 4, 255 } },
{ "border", { 12, -1, 0, 8, 255 }, { 6, -1, 0, 4, 255 } },
{ "menu", { 12, -1, 0, 8, 255 }, { 6, -1, 0, 4, 255 } },
{ "normal", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } },
{ "dialog", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } },
{ "modal_dialog", { 6, -1, 0, 1, 255 }, { 3, -1, 0, 3, 128 } },
{ "utility", { 3, -1, 0, 1, 255 }, { 3, -1, 0, 1, 128 } },
{ "border", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } },
{ "menu", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 0, 128 } },
{ "popup-menu", { 6, -1, 0, 4, 255 }, { 6, -1, 0, 4, 255 } },
{ "popup-menu", { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } },
{ "dropdown-menu", { 6, 25, 0, 4, 255 }, { 6, 100, 0, 4, 255 } },
{ "attached", { 6, 25, 0, 4, 255 }, { 6, 100, 0, 4, 255 } }
{ "dropdown-menu", { 1, 10, 0, 1, 128 }, { 1, 10, 0, 1, 128 } },
{ "attached", { 2, 50, 0, 1, 255 }, { 1, 50, 0, 1, 128 } }
};
G_DEFINE_TYPE (MetaShadowFactory, meta_shadow_factory, G_TYPE_OBJECT);
@ -189,8 +189,10 @@ meta_shadow_unref (MetaShadow *shadow)
* @window_width: actual width of the region to paint a shadow for
* @window_height: actual height of the region to paint a shadow for
* @clip: (allow-none): if non-%NULL specifies the visible portion
* of the shadow. Drawing won't be strictly clipped to this region
* but it will be used to optimize what is drawn.
* of the shadow.
* @clip_strictly: if %TRUE, drawing will be clipped strictly
* to @clip, otherwise, it will be only used to optimize
* drawing.
*
* Paints the shadow at the given position, for the specified actual
* size of the region. (Since a #MetaShadow can be shared between
@ -204,7 +206,8 @@ meta_shadow_paint (MetaShadow *shadow,
int window_width,
int window_height,
guint8 opacity,
cairo_region_t *clip)
cairo_region_t *clip,
gboolean clip_strictly)
{
float texture_width = cogl_texture_get_width (shadow->texture);
float texture_height = cogl_texture_get_height (shadow->texture);
@ -276,6 +279,9 @@ meta_shadow_paint (MetaShadow *shadow,
dest_rect.y = dest_y[j];
dest_rect.height = dest_y[j + 1] - dest_y[j];
if (dest_rect.height == 0)
continue;
for (i = 0; i < n_x; i++)
{
cairo_region_overlap_t overlap;
@ -283,16 +289,64 @@ meta_shadow_paint (MetaShadow *shadow,
dest_rect.x = dest_x[i];
dest_rect.width = dest_x[i + 1] - dest_x[i];
if (dest_rect.width == 0)
continue;
if (clip)
overlap = cairo_region_contains_rectangle (clip, &dest_rect);
else
overlap = CAIRO_REGION_OVERLAP_PART;
overlap = CAIRO_REGION_OVERLAP_IN;
if (overlap != CAIRO_REGION_OVERLAP_OUT)
cogl_rectangle_with_texture_coords (dest_x[i], dest_y[j],
dest_x[i + 1], dest_y[j + 1],
src_x[i], src_y[j],
src_x[i + 1], src_y[j + 1]);
/* There's quite a bit of overhead from allocating a new
* region in order to find an exact intersection and
* generating more geometry - we make the assumption that
* unless we have to clip strictly it will be cheaper to
* just draw the entire rectangle.
*/
if (overlap == CAIRO_REGION_OVERLAP_IN ||
(overlap == CAIRO_REGION_OVERLAP_PART && !clip_strictly))
{
cogl_rectangle_with_texture_coords (dest_x[i], dest_y[j],
dest_x[i + 1], dest_y[j + 1],
src_x[i], src_y[j],
src_x[i + 1], src_y[j + 1]);
}
else if (overlap == CAIRO_REGION_OVERLAP_PART)
{
cairo_region_t *intersection;
int n_rectangles, k;
intersection = cairo_region_create_rectangle (&dest_rect);
cairo_region_intersect (intersection, clip);
n_rectangles = cairo_region_num_rectangles (intersection);
for (k = 0; k < n_rectangles; k++)
{
cairo_rectangle_int_t rect;
float src_x1, src_x2, src_y1, src_y2;
cairo_region_get_rectangle (intersection, k, &rect);
/* Separately linear interpolate X and Y coordinates in the source
* based on the destination X and Y coordinates */
src_x1 = (src_x[i] * (dest_rect.x + dest_rect.width - rect.x) +
src_x[i + 1] * (rect.x - dest_rect.x)) / dest_rect.width;
src_x2 = (src_x[i] * (dest_rect.x + dest_rect.width - (rect.x + rect.width)) +
src_x[i + 1] * (rect.x + rect.width - dest_rect.x)) / dest_rect.width;
src_y1 = (src_y[j] * (dest_rect.y + dest_rect.height - rect.y) +
src_y[j + 1] * (rect.y - dest_rect.y)) / dest_rect.height;
src_y2 = (src_y[j] * (dest_rect.y + dest_rect.height - (rect.y + rect.height)) +
src_y[j + 1] * (rect.y + rect.height - dest_rect.y)) / dest_rect.height;
cogl_rectangle_with_texture_coords (rect.x, rect.y,
rect.x + rect.width, rect.y + rect.height,
src_x1, src_y1, src_x2, src_y2);
}
cairo_region_destroy (intersection);
}
}
}
}
@ -317,7 +371,7 @@ meta_shadow_get_bounds (MetaShadow *shadow,
cairo_rectangle_int_t *bounds)
{
bounds->x = window_x - shadow->outer_border_left;
bounds->y = window_x - shadow->outer_border_top;
bounds->y = window_y - shadow->outer_border_top;
bounds->width = window_width + shadow->outer_border_left + shadow->outer_border_right;
bounds->height = window_height + shadow->outer_border_top + shadow->outer_border_bottom;
}

View File

@ -27,6 +27,7 @@
#include "meta-shaped-texture.h"
#include "meta-texture-tower.h"
#include "meta-texture-rectangle.h"
#include <clutter/clutter.h>
#include <cogl/cogl.h>
@ -49,13 +50,8 @@ static void meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture,
static void meta_shaped_texture_dirty_mask (MetaShapedTexture *stex);
#ifdef HAVE_GLX_TEXTURE_PIXMAP
G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture,
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, \
@ -181,17 +177,6 @@ meta_shaped_texture_dirty_mask (MetaShapedTexture *stex)
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;
@ -258,24 +243,18 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
#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);
= meta_texture_rectangle_new (tex_width, tex_height,
0, /* flags */
/* data format */
COGL_PIXEL_FORMAT_A_8,
/* internal GL format */
GL_ALPHA,
/* internal cogl format */
COGL_PIXEL_FORMAT_A_8,
/* rowstride */
tex_width,
mask_data);
}
else
#endif /* GL_TEXTURE_RECTANGLE_ARB */

View File

@ -29,11 +29,7 @@
#include <config.h>
#include <clutter/clutter.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
@ -50,20 +46,12 @@ typedef struct _MetaShapedTexturePrivate MetaShapedTexturePrivate;
struct _MetaShapedTextureClass
{
#ifdef HAVE_GLX_TEXTURE_PIXMAP
ClutterGLXTexturePixmapClass parent_class;
#else
ClutterX11TexturePixmapClass parent_class;
#endif
};
struct _MetaShapedTexture
{
#ifdef HAVE_GLX_TEXTURE_PIXMAP
ClutterGLXTexturePixmap parent;
#else
ClutterX11TexturePixmap parent;
#endif
MetaShapedTexturePrivate *priv;
};

View File

@ -0,0 +1,118 @@
/*
* texture rectangle
*
* A small utility function to help create a rectangle texture
*
* Authored By Neil Roberts <neil@linux.intel.com>
*
* Copyright (C) 2011 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 <config.h>
#include "meta-texture-rectangle.h"
#ifdef GL_TEXTURE_RECTANGLE_ARB
static void (* pf_glGetIntegerv) (GLenum pname, GLint *params);
static void (* pf_glTexImage2D) (GLenum target, GLint level,
GLint internalFormat,
GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels);
static void (* pf_glGenTextures) (GLsizei n, GLuint *textures);
static void (* pf_glDeleteTextures) (GLsizei n, const GLuint *texture);
static void (* pf_glBindTexture) (GLenum target, GLuint texture);
static void
rectangle_texture_destroy_cb (void *user_data)
{
GLuint tex = GPOINTER_TO_UINT (user_data);
pf_glDeleteTextures (1, &tex);
}
#endif /* GL_TEXTURE_RECTANGLE_ARB */
CoglHandle
meta_texture_rectangle_new (unsigned int width,
unsigned int height,
CoglTextureFlags flags,
CoglPixelFormat format,
GLenum internal_gl_format,
GLenum internal_format,
unsigned int rowstride,
const guint8 *data)
{
CoglHandle cogl_tex = COGL_INVALID_HANDLE;
#ifdef GL_TEXTURE_RECTANGLE_ARB
static CoglUserDataKey user_data_key;
GLint old_binding;
GLuint tex;
if (pf_glGenTextures == NULL)
{
pf_glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv");
pf_glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D");
pf_glGenTextures = (void *) cogl_get_proc_address ("glGenTextures");
pf_glDeleteTextures = (void *) cogl_get_proc_address ("glDeleteTextures");
pf_glBindTexture = (void *) cogl_get_proc_address ("glBindTexture");
}
pf_glGenTextures (1, &tex);
pf_glGetIntegerv (GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding);
pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
pf_glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
internal_gl_format, width, height,
0, internal_gl_format,
GL_UNSIGNED_BYTE, NULL);
pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, old_binding);
cogl_tex = cogl_texture_new_from_foreign (tex,
GL_TEXTURE_RECTANGLE_ARB,
width, height,
0, 0, /* no waste */
internal_format);
/* Cogl won't destroy the GL texture when a foreign texture is used
so we need to destroy it manually. We can set a destroy
notification callback to do this transparently */
cogl_object_set_user_data (cogl_tex,
&user_data_key,
GUINT_TO_POINTER (tex),
rectangle_texture_destroy_cb);
/* Use cogl_texture_set_region instead of uploading the data
directly with GL calls so that we can let Cogl deal with setting
the pixel store parameters and handling format conversion */
if (data)
cogl_texture_set_region (cogl_tex,
0, 0, /* src x/y */
0, 0, /* dst x/y */
width, height, /* dst width/height */
width, height, /* src width/height */
format,
rowstride,
data);
#endif /* GL_TEXTURE_RECTANGLE_ARB */
return cogl_tex;
}

View File

@ -0,0 +1,45 @@
/*
* texture rectangle
*
* A small utility function to help create a rectangle texture
*
* Authored By Neil Roberts <neil@linux.intel.com>
*
* Copyright (C) 2011 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.
*/
#ifndef __META_TEXTURE_RECTANGLE_H__
#define __META_TEXTURE_RECTANGLE_H__
#include <cogl/cogl.h>
G_BEGIN_DECLS
CoglHandle
meta_texture_rectangle_new (unsigned int width,
unsigned int height,
CoglTextureFlags flags,
CoglPixelFormat format,
GLenum internal_gl_format,
GLenum internal_format,
unsigned int rowstride,
const guint8 *data);
G_END_DECLS
#endif /* __META_TEXTURE_RECTANGLE_H__ */

View File

@ -26,6 +26,7 @@
#include <string.h>
#include "meta-texture-tower.h"
#include "meta-texture-rectangle.h"
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
@ -109,22 +110,6 @@ texture_is_rectangle (CoglHandle texture)
}
#endif /* GL_TEXTURE_RECTANGLE_ARB */
static void
free_texture (CoglHandle texture)
{
#ifdef GL_TEXTURE_RECTANGLE_ARB
GLuint gl_tex;
GLenum gl_target;
cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target);
if (gl_target == GL_TEXTURE_RECTANGLE_ARB)
glDeleteTextures (1, &gl_tex);
#endif /* GL_TEXTURE_RECTANGLE_ARB */
cogl_handle_unref (texture);
}
/**
* meta_texture_tower_update_area:
* @tower: a MetaTextureTower
@ -152,7 +137,7 @@ meta_texture_tower_set_base_texture (MetaTextureTower *tower,
{
if (tower->textures[i] != COGL_INVALID_HANDLE)
{
free_texture (tower->textures[i]);
cogl_handle_unref (tower->textures[i]);
tower->textures[i] = COGL_INVALID_HANDLE;
}
@ -384,23 +369,18 @@ texture_tower_create_texture (MetaTextureTower *tower,
if ((!is_power_of_two (width) || !is_power_of_two (height)) &&
texture_is_rectangle (tower->textures[level - 1]))
{
GLuint tex = 0;
glGenTextures (1, &tex);
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
GL_RGBA, width,height,
#if TEXTURE_FORMAT == COGL_PIXEL_FORMAT_BGRA_8888_PRE
0, GL_BGRA, GL_UNSIGNED_BYTE,
#else /* assume big endian */
0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
#endif
NULL);
tower->textures[level] = cogl_texture_new_from_foreign (tex, GL_TEXTURE_RECTANGLE_ARB,
width, height,
0, 0,
TEXTURE_FORMAT);
tower->textures[level] =
meta_texture_rectangle_new (width, height,
0, /* flags */
/* data format */
TEXTURE_FORMAT,
/* internal GL format */
GL_RGBA,
/* internal cogl format */
TEXTURE_FORMAT,
/* rowstride */
width * 4,
NULL);
}
else
#endif /* GL_TEXTURE_RECTANGLE_ARB */
@ -430,12 +410,7 @@ texture_tower_revalidate_fbo (MetaTextureTower *tower,
CoglMatrix modelview;
if (tower->fbos[level] == COGL_INVALID_HANDLE)
{
/* Work around http://bugzilla.openedhand.com/show_bug.cgi?id=2110 */
cogl_flush();
tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
}
tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
if (tower->fbos[level] == COGL_INVALID_HANDLE)
return FALSE;

View File

@ -11,6 +11,8 @@
#include <X11/extensions/Xrender.h>
#include <clutter/x11/clutter-x11.h>
#define COGL_ENABLE_EXPERIMENTAL_API
#include <cogl/cogl-texture-pixmap-x11.h>
#include <gdk/gdk.h> /* for gdk_rectangle_union() */
#include <meta/display.h>
@ -142,10 +144,10 @@ static void meta_window_actor_get_property (GObject *object,
GParamSpec *pspec);
static void meta_window_actor_paint (ClutterActor *actor);
#if CLUTTER_CHECK_VERSION(1, 5, 2)
static gboolean meta_window_actor_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume);
#endif
static void meta_window_actor_detach (MetaWindowActor *self);
static gboolean meta_window_actor_has_shadow (MetaWindowActor *self);
@ -220,9 +222,7 @@ meta_window_actor_class_init (MetaWindowActorClass *klass)
object_class->constructed = meta_window_actor_constructed;
actor_class->paint = meta_window_actor_paint;
#if CLUTTER_CHECK_VERSION(1, 5, 2)
actor_class->get_paint_volume = meta_window_actor_get_paint_volume;
#endif
pspec = g_param_spec_object ("meta-window",
"MetaWindow",
@ -411,8 +411,6 @@ meta_window_actor_constructed (GObject *object)
if (format && format->type == PictTypeDirect && format->direct.alphaMask)
priv->argb32 = TRUE;
meta_window_actor_update_opacity (self);
if (!priv->actor)
{
priv->actor = meta_shaped_texture_new ();
@ -442,7 +440,7 @@ meta_window_actor_constructed (GObject *object)
clutter_actor_raise_top (priv->actor);
}
meta_window_actor_update_opacity (self);
meta_window_actor_update_shape (self, priv->shaped);
}
@ -681,7 +679,6 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
bounds->x = bounds->y = bounds->width = bounds->height = 0;
}
#if CLUTTER_CHECK_VERSION(1, 5, 2)
static void
meta_window_actor_get_shadow_bounds (MetaWindowActor *self,
gboolean appears_focused,
@ -702,7 +699,26 @@ meta_window_actor_get_shadow_bounds (MetaWindowActor *self,
shape_bounds.height,
bounds);
}
#endif
/* If we have an ARGB32 window that we decorate with a frame, it's
* probably something like a translucent terminal - something where
* the alpha channel represents transparency rather than a shape. We
* don't want to show the shadow through the translucent areas since
* the shadow is wrong for translucent windows (it should be
* translucent itself and colored), and not only that, will /look/
* horribly wrong - a misplaced big black blob. As a hack, what we
* want to do is just draw the shadow as normal outside the frame, and
* inside the frame draw no shadow. This is also not even close to
* the right result, but looks OK. We also apply this approach to
* windows set to be partially translucent with _NET_WM_WINDOW_OPACITY.
*/
static gboolean
clip_shadow_under_window (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
return (priv->argb32 || priv->opacity != 0xff) && priv->window->frame;
}
static void
meta_window_actor_paint (ClutterActor *actor)
@ -716,23 +732,41 @@ meta_window_actor_paint (ClutterActor *actor)
{
MetaShadowParams params;
cairo_rectangle_int_t shape_bounds;
cairo_region_t *clip = priv->shadow_clip;
meta_window_actor_get_shape_bounds (self, &shape_bounds);
meta_window_actor_get_shadow_params (self, appears_focused, &params);
/* The frame bounds are already subtracted from priv->shadow_clip
* if that exists.
*/
if (!clip && clip_shadow_under_window (self))
{
cairo_region_t *frame_bounds = meta_window_get_frame_bounds (priv->window);
cairo_rectangle_int_t bounds;
meta_window_actor_get_shadow_bounds (self, appears_focused, &bounds);
clip = cairo_region_create_rectangle (&bounds);
cairo_region_subtract (clip, frame_bounds);
}
meta_shadow_paint (shadow,
params.x_offset + shape_bounds.x,
params.y_offset + shape_bounds.y,
shape_bounds.width,
shape_bounds.height,
(clutter_actor_get_paint_opacity (actor) * params.opacity) / 255,
priv->shadow_clip);
(clutter_actor_get_paint_opacity (actor) * params.opacity * priv->opacity) / (255 * 255),
clip,
clip_shadow_under_window (self)); /* clip_strictly - not just as an optimization */
if (clip && clip != priv->shadow_clip)
cairo_region_destroy (clip);
}
CLUTTER_ACTOR_CLASS (meta_window_actor_parent_class)->paint (actor);
}
#if CLUTTER_CHECK_VERSION(1, 5, 2)
static gboolean
meta_window_actor_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
@ -774,7 +808,6 @@ meta_window_actor_get_paint_volume (ClutterActor *actor,
return TRUE;
}
#endif /* CLUTTER_CHECK_VERSION */
static gboolean
is_shaped (MetaDisplay *display, Window xwindow)
@ -1646,13 +1679,22 @@ meta_window_actor_update_bounding_region (MetaWindowActor *self,
priv->bounding_region = cairo_region_create_rectangle (&bounding_rectangle);
/* When we're shaped, we use the shape region to generate the shadow; the shape
* region only changes when we get ShapeNotify event; but for unshaped windows
* we generate the shadow from the bounding region, so we need to recompute
* the shadow when the size changes.
*/
if (!priv->shaped)
meta_window_actor_invalidate_shadow (self);
if (priv->shaped)
{
/* If we're shaped, the implicit shape region clipping we need to do needs
* to be updated.
*/
meta_window_actor_update_shape (self, TRUE);
}
else
{
/* When we're shaped, we use the shape region to generate the shadow; the shape
* region only changes when we get ShapeNotify event; but for unshaped windows
* we generate the shadow from the bounding region, so we need to recompute
* the shadow when the size changes.
*/
meta_window_actor_invalidate_shadow (self);
}
g_signal_emit (self, signals[SIZE_CHANGED], 0);
}
@ -1673,6 +1715,20 @@ meta_window_actor_update_shape_region (MetaWindowActor *self,
cairo_rectangle_int_t rect = { rects[i].x, rects[i].y, rects[i].width, rects[i].height };
cairo_region_union_rectangle (priv->shape_region, &rect);
}
/* Our "shape_region" is called the "bounding region" in the X Shape
* Extension Documentation.
*
* Our "bounding_region" is called the "bounding rectangle", which defines
* the shape of the window as if it the window was unshaped.
*
* The X Shape extension requires that the "bounding region" can never
* extend outside the "bounding rectangle", and says it must be implicitly
* clipped before rendering. The region we get back hasn't been clipped.
* We explicitly clip the region here.
*/
if (priv->bounding_region != NULL)
cairo_region_intersect (priv->shape_region, priv->bounding_region);
}
/**
@ -1690,7 +1746,7 @@ meta_window_actor_get_obscured_region (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
if (!priv->argb32 && priv->back_pixmap)
if (!priv->argb32 && priv->opacity == 0xff && priv->back_pixmap)
{
if (priv->shaped)
return priv->shape_region;
@ -1714,7 +1770,7 @@ dump_region (cairo_region_t *region)
for (i = 0; i < n_rects; i++)
{
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (region, &rect);
cairo_region_get_rectangle (region, i, &rect);
g_print ("+%d+%dx%dx%d ",
rect.x, rect.y, rect.width, rect.height);
}
@ -1789,6 +1845,12 @@ meta_window_actor_set_visible_region_beneath (MetaWindowActor *self,
{
meta_window_actor_clear_shadow_clip (self);
priv->shadow_clip = cairo_region_copy (beneath_region);
if (clip_shadow_under_window (self))
{
cairo_region_t *frame_bounds = meta_window_get_frame_bounds (priv->window);
cairo_region_subtract (priv->shadow_clip, frame_bounds);
}
}
}
@ -1809,6 +1871,19 @@ meta_window_actor_reset_visible_regions (MetaWindowActor *self)
meta_window_actor_clear_shadow_clip (self);
}
static gboolean
texture_pixmap_using_extension (ClutterX11TexturePixmap *texture)
{
ClutterTexture *self = CLUTTER_TEXTURE (texture);
CoglHandle handle;
handle = clutter_texture_get_cogl_texture (self);
return handle != NULL &&
cogl_is_texture_pixmap_x11 (handle) &&
cogl_texture_pixmap_x11_is_using_tfp_extension (handle);
}
static void
check_needs_pixmap (MetaWindowActor *self)
{
@ -1879,11 +1954,8 @@ check_needs_pixmap (MetaWindowActor *self)
* do it here.
* See: http://bugzilla.clutter-project.org/show_bug.cgi?id=2236
*/
#ifdef HAVE_GLX_TEXTURE_PIXMAP
if (G_UNLIKELY (!clutter_glx_texture_pixmap_using_extension (
CLUTTER_GLX_TEXTURE_PIXMAP (priv->actor))))
if (G_UNLIKELY (!texture_pixmap_using_extension (CLUTTER_X11_TEXTURE_PIXMAP (priv->actor))))
g_warning ("NOTE: Not using GLX TFP!\n");
#endif
g_object_get (priv->actor,
"pixmap-width", &pxm_width,
@ -2147,5 +2219,5 @@ meta_window_actor_update_opacity (MetaWindowActor *self)
opacity = 255;
self->priv->opacity = opacity;
clutter_actor_set_opacity (CLUTTER_ACTOR (self), opacity);
clutter_actor_set_opacity (self->priv->actor, opacity);
}

View File

@ -103,11 +103,9 @@ actor_is_untransformed (ClutterActor *actor,
static void
meta_window_group_paint (ClutterActor *actor)
{
MetaWindowGroup *window_group = META_WINDOW_GROUP (actor);
cairo_region_t *visible_region;
GLboolean scissor_test;
cairo_rectangle_int_t screen_rect = { 0 };
cairo_rectangle_int_t scissor_rect;
ClutterActor *stage;
cairo_rectangle_int_t visible_rect;
GList *children, *l;
/* We walk the list from top to bottom (opposite of painting order),
@ -117,39 +115,17 @@ meta_window_group_paint (ClutterActor *actor)
children = clutter_container_get_children (CLUTTER_CONTAINER (actor));
children = g_list_reverse (children);
/* Start off with the full screen area (for a multihead setup, we
* might want to use a more accurate union of the monitors to avoid
* painting in holes from mismatched monitor sizes. That's just an
* optimization, however.)
*/
meta_screen_get_size (window_group->screen, &screen_rect.width, &screen_rect.height);
/* Get the clipped redraw bounds from Clutter so that we can avoid
* painting shadows on windows that don't need to be painted in this
* frame. In the case of a multihead setup with mismatched monitor
* sizes, we could intersect this with an accurate union of the
* monitors to avoid painting shadows that are visible only in the
* holes. */
stage = clutter_actor_get_stage (actor);
clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage),
&visible_rect);
/* When doing a partial stage paint, Clutter will set the GL scissor
* box to the clip rectangle for the partial repaint. We combine the screen
* rectangle with the scissor box to get the region we need to
* paint. (Strangely, the scissor box sometimes seems to be bigger
* than the stage ... Clutter should probably be clampimg)
*/
glGetBooleanv (GL_SCISSOR_TEST, &scissor_test);
if (scissor_test)
{
GLint scissor_box[4];
glGetIntegerv (GL_SCISSOR_BOX, scissor_box);
scissor_rect.x = scissor_box[0];
scissor_rect.y = screen_rect.height - (scissor_box[1] + scissor_box[3]);
scissor_rect.width = scissor_box[2];
scissor_rect.height = scissor_box[3];
gdk_rectangle_intersect (&scissor_rect, &screen_rect, &scissor_rect);
}
else
{
scissor_rect = screen_rect;
}
visible_region = cairo_region_create_rectangle (&scissor_rect);
visible_region = cairo_region_create_rectangle (&visible_rect);
for (l = children; l; l = l->next)
{

View File

@ -248,7 +248,6 @@ expand_region_inverse (cairo_region_t *region,
MetaRegionBuilder builder;
MetaRegionIterator iter;
cairo_rectangle_int_t extents;
cairo_region_t *chunk;
int last_x;
@ -268,16 +267,11 @@ expand_region_inverse (cairo_region_t *region,
extents.x, extents.y + extents.height, extents.width, 1,
x_amount, y_amount, flip);
chunk = NULL;
last_x = extents.x;
for (meta_region_iterator_init (&iter, region);
!meta_region_iterator_at_end (&iter);
meta_region_iterator_next (&iter))
{
if (chunk == NULL)
chunk = cairo_region_create ();
if (iter.rectangle.x > last_x)
add_expanded_rect (&builder,
last_x, iter.rectangle.y,

View File

@ -76,6 +76,8 @@ compute_above_tab_keycode (Display *xdisplay)
keyboard = XkbGetKeyboard (xdisplay,
XkbGBN_ClientSymbolsMask | XkbGBN_KeyNamesMask | XkbGBN_GeometryMask,
XkbUseCoreKbd);
if (!keyboard)
return best_keycode;
geometry = keyboard->geom;

View File

@ -754,7 +754,7 @@ constrain_modal_dialog (MetaWindow *window,
if (!meta_prefs_get_attach_modal_dialogs ())
return TRUE;
if (window->type != META_WINDOW_MODAL_DIALOG || !parent || parent == window)
if (window->type != META_WINDOW_MODAL_DIALOG || !parent)
return TRUE;
x = parent->rect.x + (parent->rect.width / 2 - info->current.width / 2);

View File

@ -107,9 +107,6 @@ meta_core_get (Display *xdisplay,
case META_CORE_GET_CLIENT_HEIGHT:
*((gint*)answer) = window->rect.height;
break;
case META_CORE_IS_TITLEBAR_ONSCREEN:
*((gboolean*)answer) = meta_window_titlebar_is_onscreen (window);
break;
case META_CORE_GET_CLIENT_XWINDOW:
*((Window*)answer) = window->xwindow;
break;
@ -146,6 +143,9 @@ meta_core_get (Display *xdisplay,
case META_CORE_GET_FRAME_HEIGHT:
*((gint*)answer) = window->frame->rect.height;
break;
case META_CORE_GET_THEME_VARIANT:
*((char**)answer) = window->gtk_theme_variant;
break;
case META_CORE_GET_SCREEN_WIDTH:
*((gint*)answer) = window->screen->rect.width;
break;
@ -261,25 +261,25 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
}
void
meta_core_lower_beneath_focus_window (Display *xdisplay,
Window xwindow,
guint32 timestamp)
meta_core_lower_beneath_grab_window (Display *xdisplay,
Window xwindow,
guint32 timestamp)
{
XWindowChanges changes;
MetaDisplay *display;
MetaScreen *screen;
MetaWindow *focus_window;
MetaWindow *grab_window;
display = meta_display_for_x_display (xdisplay);
screen = meta_display_screen_for_xwindow (display, xwindow);
focus_window = meta_stack_get_top (screen->stack);
grab_window = display->grab_window;
if (focus_window == NULL)
if (grab_window == NULL)
return;
changes.stack_mode = Below;
changes.sibling = focus_window->frame ? focus_window->frame->xwindow
: focus_window->xwindow;
changes.sibling = grab_window->frame ? grab_window->frame->xwindow
: grab_window->xwindow;
meta_stack_tracker_record_lower_below (screen->stack_tracker,
xwindow,

View File

@ -35,7 +35,6 @@ typedef enum
META_CORE_WINDOW_HAS_FRAME,
META_CORE_GET_CLIENT_WIDTH,
META_CORE_GET_CLIENT_HEIGHT,
META_CORE_IS_TITLEBAR_ONSCREEN,
META_CORE_GET_CLIENT_XWINDOW,
META_CORE_GET_FRAME_FLAGS,
META_CORE_GET_FRAME_TYPE,
@ -48,6 +47,7 @@ typedef enum
META_CORE_GET_FRAME_Y,
META_CORE_GET_FRAME_WIDTH,
META_CORE_GET_FRAME_HEIGHT,
META_CORE_GET_THEME_VARIANT,
META_CORE_GET_SCREEN_WIDTH,
META_CORE_GET_SCREEN_HEIGHT,
} MetaCoreGetType;
@ -116,9 +116,9 @@ void meta_core_user_focus (Display *xdisplay,
Window frame_xwindow,
guint32 timestamp);
void meta_core_lower_beneath_focus_window (Display *xdisplay,
Window xwindow,
guint32 timestamp);
void meta_core_lower_beneath_grab_window (Display *xdisplay,
Window xwindow,
guint32 timestamp);
void meta_core_minimize (Display *xdisplay,
Window frame_xwindow);

View File

@ -88,19 +88,37 @@ delete_ping_timeout_func (MetaDisplay *display,
return;
}
window_title = g_locale_from_utf8 (window->title, -1, NULL, NULL, NULL);
/* This is to get a better string if the title isn't representable
* in the locale encoding; actual conversion to UTF-8 is done inside
* meta_show_dialog */
if (window->title && window->title[0])
{
tmp = g_locale_from_utf8 (window->title, -1, NULL, NULL, NULL);
if (tmp == NULL)
window_title = NULL;
else
window_title = window->title;
g_free (tmp);
}
else
{
window_title = NULL;
}
/* Translators: %s is a window title */
tmp = g_strdup_printf (_("<tt>%s</tt> is not responding."),
window_title);
if (window_title)
tmp = g_markup_printf_escaped (_("<tt>%s</tt> is not responding."),
window_title);
else
tmp = g_strdup (_("Application is not responding."));
window_content = g_strdup_printf (
"<big><b>%s</b></big>\n\n<i>%s</i>",
tmp,
_("You may choose to wait a short while for it to "
"continue or force the application to quit entirely."));
g_free (window_title);
dialog_pid =
meta_show_dialog ("--question",
window_content, NULL,

View File

@ -5194,7 +5194,7 @@ prefs_changed_callback (MetaPreference pref,
MetaWindow *parent = meta_window_get_transient_for (w);
meta_window_recalc_features (w);
if (w->type == META_WINDOW_MODAL_DIALOG && parent && parent != w)
if (w->type == META_WINDOW_MODAL_DIALOG && parent)
{
int x, y;
/* Forcing a call to move_resize() does two things: first, it handles

View File

@ -117,11 +117,6 @@ meta_window_ensure_frame (MetaWindow *window)
meta_display_register_x_window (window->display, &frame->xwindow, window);
/* Now that frame->xwindow is registered with window, we can set its
* background.
*/
meta_ui_reset_frame_bg (window->screen->ui, frame->xwindow);
/* Reparent the client window; it may be destroyed,
* thus the error trap. We'll get a destroy notify later
* and free everything. Comment in FVWM source code says
@ -157,6 +152,12 @@ meta_window_ensure_frame (MetaWindow *window)
/* stick frame to the window */
window->frame = frame;
/* Now that frame->xwindow is registered with window, we can set its
* style and background.
*/
meta_ui_update_frame_style (window->screen->ui, frame->xwindow);
meta_ui_reset_frame_bg (window->screen->ui, frame->xwindow);
if (window->title)
meta_ui_set_frame_title (window->screen->ui,
@ -328,7 +329,7 @@ meta_frame_calc_geometry (MetaFrame *frame,
*geomp = geom;
}
static void
static gboolean
update_shape (MetaFrame *frame)
{
if (frame->need_reapply_frame_shape)
@ -339,10 +340,14 @@ update_shape (MetaFrame *frame)
frame->rect.height,
frame->window->has_shape);
frame->need_reapply_frame_shape = FALSE;
return TRUE;
}
else
return FALSE;
}
void
gboolean
meta_frame_sync_to_window (MetaFrame *frame,
int resize_gravity,
gboolean need_move,
@ -350,8 +355,7 @@ meta_frame_sync_to_window (MetaFrame *frame,
{
if (!(need_move || need_resize))
{
update_shape (frame);
return;
return update_shape (frame);
}
meta_topic (META_DEBUG_GEOMETRY,
@ -401,6 +405,17 @@ meta_frame_sync_to_window (MetaFrame *frame,
meta_ui_repaint_frame (frame->window->screen->ui,
frame->xwindow);
}
return need_resize;
}
cairo_region_t *
meta_frame_get_frame_bounds (MetaFrame *frame)
{
return meta_ui_get_frame_bounds (frame->window->screen->ui,
frame->xwindow,
frame->rect.width,
frame->rect.height);
}
void

View File

@ -73,11 +73,13 @@ Window meta_frame_get_xwindow (MetaFrame *frame);
/* These should ONLY be called from meta_window_move_resize_internal */
void meta_frame_calc_geometry (MetaFrame *frame,
MetaFrameGeometry *geomp);
void meta_frame_sync_to_window (MetaFrame *frame,
gboolean meta_frame_sync_to_window (MetaFrame *frame,
int gravity,
gboolean need_move,
gboolean need_resize);
cairo_region_t *meta_frame_get_frame_bounds (MetaFrame *frame);
void meta_frame_set_screen_cursor (MetaFrame *frame,
MetaCursor cursor);

View File

@ -1250,31 +1250,6 @@ primary_modifier_still_pressed (MetaDisplay *display,
return TRUE;
}
static gboolean
process_overlay_key (MetaDisplay *display,
MetaScreen *Screen,
XEvent *event,
KeySym keysym)
{
if (event->xkey.keycode != display->overlay_key_combo.keycode)
{
display->overlay_key_only_pressed = FALSE;
return FALSE;
}
if (event->xkey.type == KeyPress)
{
display->overlay_key_only_pressed = TRUE;
}
else if (event->xkey.type == KeyRelease && display->overlay_key_only_pressed)
{
display->overlay_key_only_pressed = FALSE;
meta_display_overlay_key_activate (display);
}
return TRUE;
}
static void
invoke_handler (MetaDisplay *display,
MetaScreen *screen,
@ -1380,6 +1355,73 @@ process_event (MetaKeyBinding *bindings,
return FALSE;
}
static gboolean
process_overlay_key (MetaDisplay *display,
MetaScreen *screen,
XEvent *event,
KeySym keysym)
{
if (display->overlay_key_only_pressed)
{
if (event->xkey.keycode != display->overlay_key_combo.keycode)
{
display->overlay_key_only_pressed = FALSE;
/* OK, the user hit modifier+key rather than pressing and
* releasing the ovelay key. We want to handle the key
* sequence "normally". Unfortunately, using
* XAllowEvents(..., ReplayKeyboard, ...) doesn't quite
* work, since global keybindings won't be activated ("this
* time, however, the function ignores any passive grabs at
* above (toward the root of) the grab_window of the grab
* just released.") So, we first explicitly check for one of
* our global keybindings, and if not found, we then replay
* the event. Other clients with global grabs will be out of
* luck.
*/
if (process_event (display->key_bindings,
display->n_key_bindings,
display, screen, NULL, event, keysym,
FALSE))
{
/* As normally, after we've handled a global key
* binding, we unfreeze the keyboard but keep the grab
* (this is important for something like cycling
* windows */
XAllowEvents (display->xdisplay, AsyncKeyboard, event->xkey.time);
}
else
{
/* Replay the event so it gets delivered to our
* per-window key bindings or to the application */
XAllowEvents (display->xdisplay, ReplayKeyboard, event->xkey.time);
}
}
else if (event->xkey.type == KeyRelease)
{
display->overlay_key_only_pressed = FALSE;
/* We want to unfreeze events, but keep the grab so that if the user
* starts typing into the overlay we get all the keys */
XAllowEvents (display->xdisplay, AsyncKeyboard, event->xkey.time);
meta_display_overlay_key_activate (display);
}
return TRUE;
}
else if (event->xkey.type == KeyPress &&
event->xkey.keycode == display->overlay_key_combo.keycode)
{
display->overlay_key_only_pressed = TRUE;
/* We keep the keyboard frozen - this allows us to use ReplayKeyboard
* on the next event if it's not the release of the overlay key */
XAllowEvents (display->xdisplay, SyncKeyboard, event->xkey.time);
return TRUE;
}
else
return FALSE;
}
/* Handle a key event. May be called recursively: some key events cause
* grabs to be ended and then need to be processed again in their own
* right. This cannot cause infinite recursion because we never call
@ -1406,11 +1448,19 @@ meta_display_process_key_event (MetaDisplay *display,
const char *str;
MetaScreen *screen;
XAllowEvents (display->xdisplay,
all_bindings_disabled ? ReplayKeyboard : AsyncKeyboard,
event->xkey.time);
if (all_bindings_disabled)
return FALSE;
{
/* In this mode, we try to pretend we don't have grabs, so we
* immediately replay events and drop the grab. (This still
* messes up global passive grabs from other clients.) The
* FALSE return here is a little suspect, but we don't really
* know if we'll see the event again or not, and it's pretty
* poorly defined how this mode is supposed to interact with
* plugins.
*/
XAllowEvents (display->xdisplay, ReplayKeyboard, event->xkey.time);
return FALSE;
}
/* if key event was on root window, we have a shortcut */
screen = meta_display_screen_for_root (display, event->xkey.window);
@ -1440,8 +1490,17 @@ meta_display_process_key_event (MetaDisplay *display,
str ? str : "none", event->xkey.state,
window ? window->desc : "(no window)");
keep_grab = TRUE;
all_keys_grabbed = window ? window->all_keys_grabbed : screen->all_keys_grabbed;
if (!all_keys_grabbed)
{
handled = process_overlay_key (display, screen, event, keysym);
if (handled)
return TRUE;
}
XAllowEvents (display->xdisplay, AsyncKeyboard, event->xkey.time);
keep_grab = TRUE;
if (all_keys_grabbed)
{
if (display->grab_op == META_GRAB_OP_NONE)
@ -1527,10 +1586,6 @@ meta_display_process_key_event (MetaDisplay *display,
return TRUE;
}
handled = process_overlay_key (display, screen, event, keysym);
if (handled)
return TRUE;
/* Do the normal keybindings */
return process_event (display->key_bindings,
display->n_key_bindings,

View File

@ -251,6 +251,11 @@ meta_get_option_context (void)
{
GOptionContext *ctx;
if (setlocale (LC_ALL, "") == NULL)
meta_warning ("Locale not understood by C library, internationalization will not work\n");
bindtextdomain (GETTEXT_PACKAGE, MUTTER_LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
ctx = g_option_context_new (NULL);
g_option_context_add_main_entries (ctx, meta_options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, clutter_get_option_group_without_init ());
@ -385,9 +390,6 @@ meta_init (void)
sigset_t empty_mask;
GIOChannel *channel;
if (setlocale (LC_ALL, "") == NULL)
meta_warning ("Locale not understood by C library, internationalization will not work\n");
g_type_init ();
sigemptyset (&empty_mask);
@ -430,10 +432,6 @@ meta_init (void)
meta_print_self_identity ();
bindtextdomain (GETTEXT_PACKAGE, MUTTER_LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#ifdef HAVE_INTROSPECTION
g_irepository_prepend_search_path (MUTTER_PKGLIBDIR);
#endif
@ -573,10 +571,11 @@ meta_run (void)
void
meta_quit (MetaExitCode code)
{
meta_exit_code = code;
if (g_main_loop_is_running (meta_main_loop))
g_main_loop_quit (meta_main_loop);
{
meta_exit_code = code;
g_main_loop_quit (meta_main_loop);
}
}
/**

View File

@ -1679,6 +1679,7 @@ button_layout_handler (MetaPreference pref,
if (string_value)
sides = g_strsplit (string_value, ":", 2);
i = 0;
if (sides != NULL && sides[0] != NULL)
{
char **buttons;
@ -1733,12 +1734,13 @@ button_layout_handler (MetaPreference pref,
++b;
}
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
new_layout.left_buttons_has_spacer[i] = FALSE;
g_strfreev (buttons);
}
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
new_layout.left_buttons_has_spacer[i] = FALSE;
i = 0;
if (sides != NULL && sides[0] != NULL && sides[1] != NULL)
{
char **buttons;
@ -1792,12 +1794,12 @@ button_layout_handler (MetaPreference pref,
++b;
}
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
new_layout.right_buttons_has_spacer[i] = FALSE;
g_strfreev (buttons);
}
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
new_layout.right_buttons_has_spacer[i] = FALSE;
g_strfreev (sides);
/* Invert the button layout for RTL languages */

View File

@ -349,6 +349,43 @@ set_wm_icon_size_hint (MetaScreen *screen)
#undef N_VALS
}
/* The list of monitors reported by the windowing system might include
* mirrored monitors with identical bounds. Since mirrored monitors
* shouldn't be treated as separate monitors for most purposes, we
* filter them out here. (We ignore the possibility of partially
* overlapping monitors because they are rare and it's hard to come
* up with any sensible interpretation.)
*/
static void
filter_mirrored_monitors (MetaScreen *screen)
{
int i, j;
/* Currently always true and simplifies things */
g_assert (screen->primary_monitor_index == 0);
for (i = 1; i < screen->n_monitor_infos; i++)
{
/* In case we've filtered previous monitors */
screen->monitor_infos[i].number = i;
for (j = 0; j < i; j++)
{
if (meta_rectangle_equal (&screen->monitor_infos[i].rect,
&screen->monitor_infos[j].rect))
{
memmove (&screen->monitor_infos[i],
&screen->monitor_infos[i + 1],
(screen->n_monitor_infos - i - 1) * sizeof (MetaMonitorInfo));
screen->n_monitor_infos--;
i--;
continue;
}
}
}
}
static void
reload_monitor_infos (MetaScreen *screen)
{
@ -538,6 +575,8 @@ reload_monitor_infos (MetaScreen *screen)
screen->monitor_infos[0].rect = screen->rect;
}
filter_mirrored_monitors (screen);
g_assert (screen->n_monitor_infos > 0);
g_assert (screen->monitor_infos != NULL);
}

View File

@ -308,13 +308,16 @@ meta_session_init (const char *previous_client_id,
*/
char hint = SmRestartIfRunning;
char priority = 20; /* low to run before other apps */
const char *prgname;
prgname = g_get_prgname ();
prop1.name = SmProgram;
prop1.type = SmARRAY8;
prop1.num_vals = 1;
prop1.vals = &prop1val;
prop1val.value = "mutter";
prop1val.length = strlen ("mutter");
prop1val.value = (char *)prgname;
prop1val.length = strlen (prgname);
/* twm sets getuid() for this, but the SM spec plainly
* says pw_name, twm is on crack
@ -573,6 +576,9 @@ set_clone_restart_commands (void)
char *discardv[10];
int i;
SmProp prop1, prop2, prop3, *props[3];
const char *prgname;
prgname = g_get_prgname ();
/* Restart (use same client ID) */
@ -582,7 +588,7 @@ set_clone_restart_commands (void)
g_return_if_fail (client_id);
i = 0;
restartv[i] = "mutter";
restartv[i] = (char *)prgname;
++i;
restartv[i] = "--sm-client-id";
++i;
@ -603,7 +609,7 @@ set_clone_restart_commands (void)
/* Clone (no client ID) */
i = 0;
clonev[i] = "mutter";
clonev[i] = (char *)prgname;
++i;
clonev[i] = NULL;

View File

@ -584,6 +584,25 @@ meta_gravity_to_string (int gravity)
}
}
/* Command line arguments are passed in the locale encoding; in almost
* all cases, we'd hope that is UTF-8 and no conversion is necessary.
* If it's not UTF-8, then it's possible that the message isn't
* representable in the locale encoding.
*/
static void
append_argument (GPtrArray *args,
const char *arg)
{
char *locale_arg = g_locale_from_utf8 (arg, -1, NULL, NULL, NULL);
/* This is cheesy, but it's better to have a few ???'s in the dialog
* for an unresponsive application than no dialog at all appear */
if (!locale_arg)
locale_arg = g_strdup ("???");
g_ptr_array_add (args, locale_arg);
}
GPid
meta_show_dialog (const char *type,
const char *message,
@ -597,59 +616,57 @@ meta_show_dialog (const char *type,
{
GError *error = NULL;
GSList *tmp;
int i=0;
GPid child_pid;
const char **argvl = g_malloc(sizeof (char*) *
(17 +
g_slist_length (columns)*2 +
g_slist_length (entries)));
GPtrArray *args;
argvl[i++] = "zenity";
argvl[i++] = type;
argvl[i++] = "--display";
argvl[i++] = display;
argvl[i++] = "--class";
argvl[i++] = "mutter-dialog";
argvl[i++] = "--title";
args = g_ptr_array_new ();
append_argument (args, "zenity");
append_argument (args, type);
append_argument (args, "--display");
append_argument (args, display);
append_argument (args, "--class");
append_argument (args, "mutter-dialog");
append_argument (args, "--title");
/* Translators: This is the title used on dialog boxes */
argvl[i++] = _("Mutter");
argvl[i++] = "--text";
argvl[i++] = message;
append_argument (args, _("Mutter"));
append_argument (args, "--text");
append_argument (args, message);
if (timeout)
{
argvl[i++] = "--timeout";
argvl[i++] = timeout;
append_argument (args, "--timeout");
append_argument (args, timeout);
}
if (ok_text)
{
argvl[i++] = "--ok-label";
argvl[i++] = ok_text;
append_argument (args, "--ok-label");
append_argument (args, ok_text);
}
if (cancel_text)
{
argvl[i++] = "--cancel-label";
argvl[i++] = cancel_text;
append_argument (args, "--cancel-label");
append_argument (args, cancel_text);
}
tmp = columns;
while (tmp)
{
argvl[i++] = "--column";
argvl[i++] = tmp->data;
append_argument (args, "--column");
append_argument (args, tmp->data);
tmp = tmp->next;
}
tmp = entries;
while (tmp)
{
argvl[i++] = tmp->data;
append_argument (args, tmp->data);
tmp = tmp->next;
}
argvl[i] = NULL;
g_ptr_array_add (args, NULL); /* NULL-terminate */
if (transient_for)
{
@ -660,7 +677,7 @@ meta_show_dialog (const char *type,
g_spawn_async (
"/",
(gchar**) argvl, /* ugh */
(gchar**) args->pdata,
NULL,
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
NULL, NULL,
@ -671,7 +688,7 @@ meta_show_dialog (const char *type,
if (transient_for)
unsetenv ("WINDOWID");
g_free (argvl);
g_ptr_array_free (args, TRUE);
if (error)
{
@ -691,6 +708,7 @@ static guint last_later_id = 0;
typedef struct
{
guint id;
guint ref_count;
MetaLaterType when;
GSourceFunc func;
gpointer data;
@ -706,14 +724,30 @@ static guint later_repaint_func = 0;
static void ensure_later_repaint_func (void);
static void
unref_later (MetaLater *later)
{
if (--later->ref_count == 0)
{
if (later->notify)
{
later->notify (later->data);
later->notify = NULL;
}
g_slice_free (MetaLater, later);
}
}
static void
destroy_later (MetaLater *later)
{
if (later->source)
g_source_remove (later->source);
if (later->notify)
later->notify (later->data);
g_slice_free (MetaLater, later);
{
g_source_remove (later->source);
later->source = 0;
}
later->func = NULL;
unref_later (later);
}
/* Used to sort the list of laters with the highest priority
@ -729,34 +763,41 @@ compare_laters (gconstpointer a,
static gboolean
run_repaint_laters (gpointer data)
{
GSList *old_laters = laters;
GSList *laters_copy;
GSList *l;
gboolean keep_timeline_running = FALSE;
laters = NULL;
for (l = old_laters; l; l = l->next)
laters_copy = NULL;
for (l = laters; l; l = l->next)
{
MetaLater *later = l->data;
if (later->source == 0 ||
(later->when <= META_LATER_BEFORE_REDRAW && !later->run_once))
{
if (later->func (later->data))
{
if (later->source == 0)
keep_timeline_running = TRUE;
laters = g_slist_insert_sorted (laters, later, compare_laters);
}
else
destroy_later (later);
later->ref_count++;
laters_copy = g_slist_prepend (laters_copy, later);
}
}
laters_copy = g_slist_reverse (laters_copy);
for (l = laters_copy; l; l = l->next)
{
MetaLater *later = l->data;
if (later->func && later->func (later->data))
{
if (later->source == 0)
keep_timeline_running = TRUE;
}
else
laters = g_slist_insert_sorted (laters, later, compare_laters);
meta_later_remove (later->id);
unref_later (later);
}
if (!keep_timeline_running)
clutter_timeline_stop (later_timeline);
g_slist_free (old_laters);
g_slist_free (laters_copy);
/* Just keep the repaint func around - it's cheap if the list is empty */
return TRUE;
@ -783,9 +824,7 @@ call_idle_later (gpointer data)
if (!later->func (later->data))
{
laters = g_slist_remove (laters, later);
later->source = 0;
destroy_later (later);
meta_later_remove (later->id);
return FALSE;
}
else
@ -821,6 +860,7 @@ meta_later_add (MetaLaterType when,
MetaLater *later = g_slice_new0 (MetaLater);
later->id = ++last_later_id;
later->ref_count = 1;
later->when = when;
later->func = func;
later->data = data;

View File

@ -42,6 +42,7 @@
#include "stack.h"
#include "iconcache.h"
#include <X11/Xutil.h>
#include <cairo.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
typedef struct _MetaWindowQueue MetaWindowQueue;
@ -98,6 +99,7 @@ struct _MetaWindow
char *wm_client_machine;
char *startup_id;
char *mutter_hints;
char *gtk_theme_variant;
int net_wm_pid;
@ -316,6 +318,9 @@ struct _MetaWindow
/* if TRUE, application is buggy and SYNC resizing is turned off */
guint disable_sync : 1;
/* if non-NULL, the bounds of the window frame */
cairo_region_t *frame_bounds;
/* Note: can be NULL */
GSList *struts;

View File

@ -845,6 +845,8 @@ reload_wm_class (MetaWindow *window,
if (value->v.class_hint.res_class)
window->res_class = g_strdup (value->v.class_hint.res_class);
g_object_notify (G_OBJECT (window), "wm-class");
}
meta_verbose ("Window %s class: '%s' name: '%s'\n",
@ -1466,7 +1468,9 @@ reload_transient_for (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
if (window->has_focus && window->xtransient_for != None)
MetaWindow *parent = NULL;
if (meta_window_appears_focused (window) && window->xtransient_for != None)
meta_window_propagate_focus_appearance (window, FALSE);
window->xtransient_for = None;
@ -1475,14 +1479,33 @@ reload_transient_for (MetaWindow *window,
window->xtransient_for = value->v.xwindow;
/* Make sure transient_for is valid */
if (window->xtransient_for != None &&
meta_display_lookup_x_window (window->display,
window->xtransient_for) == NULL)
if (window->xtransient_for != None)
{
meta_warning (_("Invalid WM_TRANSIENT_FOR window 0x%lx specified "
"for %s.\n"),
window->xtransient_for, window->desc);
window->xtransient_for = None;
parent = meta_display_lookup_x_window (window->display,
window->xtransient_for);
if (!parent)
{
meta_warning (_("Invalid WM_TRANSIENT_FOR window 0x%lx specified "
"for %s.\n"),
window->xtransient_for, window->desc);
window->xtransient_for = None;
}
}
/* Make sure there is not a loop */
while (parent)
{
if (parent == window)
{
meta_warning (_("WM_TRANSIENT_FOR window 0x%lx for %s "
"would create loop.\n"),
window->xtransient_for, window->desc);
window->xtransient_for = None;
break;
}
parent = meta_display_lookup_x_window (parent->display,
parent->xtransient_for);
}
window->transient_parent_is_root_window =
@ -1513,10 +1536,39 @@ reload_transient_for (MetaWindow *window,
if (!window->constructing && !window->override_redirect)
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
if (window->has_focus && window->xtransient_for != None)
if (meta_window_appears_focused (window) && window->xtransient_for != None)
meta_window_propagate_focus_appearance (window, TRUE);
}
static void
reload_gtk_theme_variant (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
char *requested_variant = NULL;
char *current_variant = window->gtk_theme_variant;
if (value->type != META_PROP_VALUE_INVALID)
{
requested_variant = value->v.str;
meta_verbose ("Requested \"%s\" theme variant for window %s.\n",
requested_variant, window->desc);
}
if (g_strcmp0 (requested_variant, current_variant))
{
g_free (current_variant);
if (requested_variant)
window->gtk_theme_variant = g_strdup (requested_variant);
else
window->gtk_theme_variant = NULL;
if (window->frame)
meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow);
}
}
/**
* Initialises the property hooks system. Each row in the table named "hooks"
* represents an action to take when a property is found on a newly-created
@ -1569,6 +1621,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
{ display->atom__NET_WM_STATE, META_PROP_VALUE_ATOM_LIST, reload_net_wm_state, TRUE, FALSE },
{ display->atom__MOTIF_WM_HINTS, META_PROP_VALUE_MOTIF_HINTS, reload_mwm_hints, TRUE, FALSE },
{ XA_WM_TRANSIENT_FOR, META_PROP_VALUE_WINDOW, reload_transient_for, TRUE, FALSE },
{ display->atom__GTK_THEME_VARIANT, META_PROP_VALUE_UTF8, reload_gtk_theme_variant, TRUE, FALSE },
{ display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window, TRUE, FALSE },
{ display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
{ display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE },

View File

@ -150,12 +150,14 @@ enum {
PROP_FULLSCREEN,
PROP_MAXIMIZED_HORIZONTALLY,
PROP_MAXIMIZED_VERTICALLY,
PROP_MINIMIZED,
PROP_WINDOW_TYPE,
PROP_USER_TIME,
PROP_DEMANDS_ATTENTION,
PROP_URGENT,
PROP_MUTTER_HINTS,
PROP_APPEARS_FOCUSED
PROP_APPEARS_FOCUSED,
PROP_WM_CLASS
};
enum
@ -181,6 +183,9 @@ meta_window_finalize (GObject *object)
if (window->mini_icon)
g_object_unref (G_OBJECT (window->mini_icon));
if (window->frame_bounds)
cairo_region_destroy (window->frame_bounds);
meta_icon_cache_free (&window->icon_cache);
g_free (window->sm_client_id);
@ -192,6 +197,7 @@ meta_window_finalize (GObject *object)
g_free (window->title);
g_free (window->icon_name);
g_free (window->desc);
g_free (window->gtk_theme_variant);
}
static void
@ -225,6 +231,9 @@ meta_window_get_property(GObject *object,
case PROP_MAXIMIZED_VERTICALLY:
g_value_set_boolean (value, win->maximized_vertically);
break;
case PROP_MINIMIZED:
g_value_set_boolean (value, win->minimized);
break;
case PROP_WINDOW_TYPE:
g_value_set_enum (value, win->type);
break;
@ -243,6 +252,9 @@ meta_window_get_property(GObject *object,
case PROP_APPEARS_FOCUSED:
g_value_set_boolean (value, meta_window_appears_focused (win));
break;
case PROP_WM_CLASS:
g_value_set_string (value, win->res_class);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -327,6 +339,13 @@ meta_window_class_init (MetaWindowClass *klass)
"Whether window is maximized vertically",
FALSE,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_MINIMIZED,
g_param_spec_boolean ("minimized",
"Minimizing",
"Whether window is minimized",
FALSE,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_WINDOW_TYPE,
@ -378,6 +397,14 @@ meta_window_class_init (MetaWindowClass *klass)
FALSE,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_WM_CLASS,
g_param_spec_string ("wm-class",
"WM_CLASS",
"Contents of the WM_CLASS property of this window",
NULL,
G_PARAM_READABLE));
window_signals[WORKSPACE_CHANGED] =
g_signal_new ("workspace-changed",
G_TYPE_FROM_CLASS (object_class),
@ -1493,6 +1520,8 @@ meta_window_unmanage (MetaWindow *window,
* on what gets focused, maintaining sloppy focus
* invariants.
*/
if (meta_window_appears_focused (window))
meta_window_propagate_focus_appearance (window, FALSE);
if (window->has_focus)
{
meta_topic (META_DEBUG_FOCUS,
@ -1501,7 +1530,6 @@ meta_window_unmanage (MetaWindow *window,
meta_workspace_focus_default_window (window->screen->active_workspace,
window,
timestamp);
meta_window_propagate_focus_appearance (window, FALSE);
}
else if (window->display->expected_focus_window == window)
{
@ -3131,6 +3159,7 @@ meta_window_minimize (MetaWindow *window)
"Minimizing window %s which doesn't have the focus\n",
window->desc);
}
g_object_notify (G_OBJECT (window), "minimized");
}
}
@ -3148,6 +3177,7 @@ meta_window_unminimize (MetaWindow *window)
meta_window_foreach_transient (window,
queue_calc_showing_func,
NULL);
g_object_notify (G_OBJECT (window), "minimized");
}
}
@ -3450,13 +3480,25 @@ meta_window_tile (MetaWindow *window)
}
}
static gboolean
meta_window_can_tile_maximized (MetaWindow *window)
{
if (!META_WINDOW_ALLOWS_RESIZE (window))
return FALSE;
if (!window->has_maximize_func)
return FALSE;
return TRUE;
}
static gboolean
meta_window_can_tile_side_by_side (MetaWindow *window)
{
const MetaMonitorInfo *monitor;
MetaRectangle tile_area;
if (!META_WINDOW_ALLOWS_RESIZE (window))
if (!meta_window_can_tile_maximized (window))
return FALSE;
monitor = meta_screen_get_current_monitor (window->screen);
@ -3482,18 +3524,6 @@ meta_window_can_tile_side_by_side (MetaWindow *window)
tile_area.height >= window->size_hints.min_height;
}
static gboolean
meta_window_can_tile_maximized (MetaWindow *window)
{
if (!META_WINDOW_ALLOWS_RESIZE (window))
return FALSE;
if (!window->has_maximize_func)
return FALSE;
return TRUE;
}
static void
unmaximize_window_before_freeing (MetaWindow *window)
{
@ -4185,7 +4215,7 @@ move_attached_dialog (MetaWindow *window,
{
MetaWindow *parent = meta_window_get_transient_for (window);
if (window->type == META_WINDOW_MODAL_DIALOG && parent && parent != window)
if (window->type == META_WINDOW_MODAL_DIALOG && parent)
/* It ignores x,y for such a dialog */
meta_window_move (window, FALSE, 0, 0);
@ -4295,6 +4325,7 @@ meta_window_move_resize_internal (MetaWindow *window,
int frame_size_dy;
int size_dx;
int size_dy;
gboolean frame_shape_changed = FALSE;
gboolean is_configure_request;
gboolean do_gravity_adjust;
gboolean is_user_action;
@ -4598,9 +4629,9 @@ meta_window_move_resize_internal (MetaWindow *window,
meta_window_set_gravity (window, StaticGravity);
if (configure_frame_first && window->frame)
meta_frame_sync_to_window (window->frame,
gravity,
need_move_frame, need_resize_frame);
frame_shape_changed = meta_frame_sync_to_window (window->frame,
gravity,
need_move_frame, need_resize_frame);
values.border_width = 0;
values.x = client_move_x;
@ -4655,9 +4686,9 @@ meta_window_move_resize_internal (MetaWindow *window,
}
if (!configure_frame_first && window->frame)
meta_frame_sync_to_window (window->frame,
gravity,
need_move_frame, need_resize_frame);
frame_shape_changed = meta_frame_sync_to_window (window->frame,
gravity,
need_move_frame, need_resize_frame);
/* Put gravity back to be nice to lesser window managers */
if (use_static_gravity)
@ -4700,6 +4731,12 @@ meta_window_move_resize_internal (MetaWindow *window,
* b) all constraints are obeyed by window->rect and frame->rect
*/
if (frame_shape_changed && window->frame_bounds)
{
cairo_region_destroy (window->frame_bounds);
window->frame_bounds = NULL;
}
if (meta_prefs_get_attach_modal_dialogs ())
meta_window_foreach_transient (window, move_attached_dialog, NULL);
}
@ -6379,37 +6416,53 @@ meta_window_client_message (MetaWindow *window,
return FALSE;
}
/**
* meta_window_propagate_focus_appearance:
* @window: the window to start propagating from
* @focused: %TRUE if @window's ancestors should appear focused,
* %FALSE if they should not.
*
* Adjusts the value of #MetaWindow:appears-focused on @window's
* ancestors (but not @window itself). If @focused is %TRUE, each of
* @window's ancestors will have its %attached_focus_window field set
* to the current %focus_window. If @focused if %FALSE, each of
* @window's ancestors will have its %attached_focus_window field
* cleared if it is currently %focus_window.
*/
void
meta_window_propagate_focus_appearance (MetaWindow *window,
gboolean focused)
{
MetaWindow *child, *parent;
MetaWindow *child, *parent, *focus_window;
if (!meta_prefs_get_attach_modal_dialogs ())
return;
focus_window = window->display->focus_window;
child = window;
parent = meta_window_get_transient_for (child);
while (child->type == META_WINDOW_MODAL_DIALOG && parent)
while (parent && (!focused || child->type == META_WINDOW_MODAL_DIALOG))
{
gboolean child_focus_state_changed;
if (focused)
{
if (parent->attached_focus_window == window)
if (parent->attached_focus_window == focus_window)
break;
child_focus_state_changed = (parent->attached_focus_window == NULL);
parent->attached_focus_window = window;
parent->attached_focus_window = focus_window;
}
else
{
if (parent->attached_focus_window != window)
if (parent->attached_focus_window != focus_window)
break;
child_focus_state_changed = (parent->attached_focus_window != NULL);
parent->attached_focus_window = NULL;
}
if (child_focus_state_changed && !parent->has_focus)
if (child_focus_state_changed && !parent->has_focus &&
parent != window->display->expected_focus_window)
{
g_object_notify (G_OBJECT (parent), "appears-focused");
if (parent->frame)
@ -6597,6 +6650,8 @@ meta_window_notify_focus (MetaWindow *window,
meta_topic (META_DEBUG_FOCUS,
"* Focus --> NULL (was %s)\n", window->desc);
meta_window_propagate_focus_appearance (window, FALSE);
window->display->focus_window = NULL;
g_object_notify (G_OBJECT (window->display), "focus-window");
window->has_focus = FALSE;
@ -6607,7 +6662,6 @@ meta_window_notify_focus (MetaWindow *window,
if (window->frame)
meta_frame_queue_draw (window->frame);
}
meta_window_propagate_focus_appearance (window, FALSE);
meta_error_trap_push (window->display);
XUninstallColormap (window->display->xdisplay,
@ -8202,50 +8256,42 @@ update_move (MetaWindow *window,
shake_threshold = meta_ui_get_drag_threshold (window->screen->ui) *
DRAG_THRESHOLD_TO_SHAKE_THRESHOLD_FACTOR;
if (meta_prefs_get_edge_tiling ())
if (meta_prefs_get_edge_tiling () &&
!META_WINDOW_MAXIMIZED (window) &&
!META_WINDOW_TILED_SIDE_BY_SIDE (window))
{
const MetaMonitorInfo *monitor;
MetaRectangle work_area;
/* For side-by-side tiling we are interested in the inside vertical
* edges of the work area of the monitor where the pointer is located.
* Also see comment in meta_window_get_current_tile_area()
* edges of the work area of the monitor where the pointer is located,
* and in the outside top edge for maximized tiling.
* Also see comment in meta_window_get_current_tile_area().
*
* For maximized tiling we use the outside edge instead of the
* inside edge, because we don't want to force users to maximize
* windows they are placing near the top of their screens.
*/
monitor = meta_screen_get_current_monitor (window->screen);
meta_window_get_work_area_for_monitor (window,
monitor->number,
&work_area);
if (meta_window_can_tile_side_by_side (window))
{
/* check if cursor is near an edge of the work area */
if (x >= monitor->rect.x && x < (work_area.x + shake_threshold))
window->tile_mode = META_TILE_LEFT;
else if (x >= work_area.x + work_area.width - shake_threshold &&
x < (monitor->rect.x + monitor->rect.width))
window->tile_mode = META_TILE_RIGHT;
else
window->tile_mode = META_TILE_NONE;
}
/* For maximized tiling we are interested in the outside top edge
* of the work area of the monitor where the pointer is located.
*
* We use the outside edge instead of the inside edge, because we
* don't want to force users to maximize windows they are placing
* near the top of their screens.
*
* If window->tile_mode is not NONE, that means that either we are
* on an edge and set it above, or we are currently tiled (in
* which case meta_window_can_tile_side_by_side() and
* meta_window_can_tile_maximized() return FALSE).
/* Check if the cursor is in a position which triggers tiling
* and set tile_mode accordingly.
*/
if (window->tile_mode == META_TILE_NONE && meta_window_can_tile_maximized (window))
{
/* check if cursor is on the top edge of the monitor*/
if (y >= monitor->rect.y && y <= work_area.y)
window->tile_mode = META_TILE_MAXIMIZED;
}
if (meta_window_can_tile_side_by_side (window) &&
x >= monitor->rect.x && x < (work_area.x + shake_threshold))
window->tile_mode = META_TILE_LEFT;
else if (meta_window_can_tile_side_by_side (window) &&
x >= work_area.x + work_area.width - shake_threshold &&
x < (monitor->rect.x + monitor->rect.width))
window->tile_mode = META_TILE_RIGHT;
else if (meta_window_can_tile_maximized (window) &&
y >= monitor->rect.y && y <= work_area.y)
window->tile_mode = META_TILE_MAXIMIZED;
else
window->tile_mode = META_TILE_NONE;
}
/* shake loose (unmaximize) maximized or tiled window if dragged beyond
@ -8699,8 +8745,7 @@ update_resize (MetaWindow *window,
*/
if (old.width != new_w || old.height != new_h)
{
if ((window->display->grab_resize_unmaximize == new_unmaximize))
meta_window_resize_with_gravity (window, TRUE, new_w, new_h, gravity);
meta_window_resize_with_gravity (window, TRUE, new_w, new_h, gravity);
}
}
else
@ -9229,46 +9274,17 @@ meta_window_foreach_ancestor (MetaWindow *window,
void *user_data)
{
MetaWindow *w;
MetaWindow *tortoise;
w = window;
tortoise = window;
while (TRUE)
do
{
if (w->xtransient_for == None ||
w->transient_parent_is_root_window)
break;
w = meta_display_lookup_x_window (w->display, w->xtransient_for);
if (w == NULL || w == tortoise)
break;
if (!(* func) (w, user_data))
break;
if (w->xtransient_for == None ||
w->transient_parent_is_root_window)
break;
w = meta_display_lookup_x_window (w->display, w->xtransient_for);
if (w == NULL || w == tortoise)
break;
if (!(* func) (w, user_data))
break;
tortoise = meta_display_lookup_x_window (tortoise->display,
tortoise->xtransient_for);
/* "w" should have already covered all ground covered by the
* tortoise, so the following must hold.
*/
g_assert (tortoise != NULL);
g_assert (tortoise->xtransient_for != None);
g_assert (!tortoise->transient_parent_is_root_window);
}
while (w && (* func) (w, user_data));
}
typedef struct
@ -10093,7 +10109,9 @@ meta_window_is_remote (MetaWindow *window)
{
g_return_val_if_fail (META_IS_WINDOW (window), FALSE);
return g_strcmp0 (window->wm_client_machine, window->display->hostname) != 0;
if (window->wm_client_machine != NULL)
return g_strcmp0 (window->wm_client_machine, window->display->hostname) != 0;
return FALSE;
}
/**
@ -10209,3 +10227,24 @@ meta_window_get_frame_type (MetaWindow *window)
return base_type;
}
}
/**
* meta_window_get_frame_bounds:
*
* Gets a region representing the outer bounds of the window's frame.
*
* Return value: (transfer none) (allow-none): a #cairo_region_t
* holding the outer bounds of the window, or %NULL if the window
* doesn't have a frame.
*/
cairo_region_t *
meta_window_get_frame_bounds (MetaWindow *window)
{
if (!window->frame_bounds)
{
if (window->frame)
window->frame_bounds = meta_frame_get_frame_bounds (window->frame);
}
return window->frame_bounds;
}

View File

@ -58,6 +58,7 @@ item(_MUTTER_RELOAD_THEME_MESSAGE)
item(_MUTTER_SET_KEYBINDINGS_MESSAGE)
item(_MUTTER_TOGGLE_VERBOSE)
item(_MUTTER_HINTS)
item(_GTK_THEME_VARIANT)
item(_GNOME_WM_KEYBINDINGS)
item(_GNOME_PANEL_ACTION)
item(_GNOME_PANEL_ACTION_MAIN_MENU)

View File

@ -37,19 +37,19 @@ typedef enum
GdkPixbuf* meta_gradient_create_simple (int width,
int height,
const GdkColor *from,
const GdkColor *to,
const GdkRGBA *from,
const GdkRGBA *to,
MetaGradientType style);
GdkPixbuf* meta_gradient_create_multi (int width,
int height,
const GdkColor *colors,
const GdkRGBA *colors,
int n_colors,
MetaGradientType style);
GdkPixbuf* meta_gradient_create_interwoven (int width,
int height,
const GdkColor colors1[2],
const GdkRGBA colors1[2],
int thickness1,
const GdkColor colors2[2],
const GdkRGBA colors2[2],
int thickness2);

View File

@ -23,6 +23,7 @@
#define META_WINDOW_H
#include <glib-object.h>
#include <cairo.h>
#include <X11/Xlib.h>
#include <meta/boxes.h>
@ -156,4 +157,6 @@ const char *meta_window_get_mutter_hints (MetaWindow *window);
MetaFrameType meta_window_get_frame_type (MetaWindow *window);
cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window);
#endif

View File

@ -682,7 +682,7 @@ desktop_cb (GtkAction *action,
{
GtkWidget *window;
GtkWidget *label;
GdkColor desktop_color;
GdkRGBA desktop_color;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
set_gtk_window_type (GTK_WINDOW (window), "_NET_WM_WINDOW_TYPE_DESKTOP");
@ -691,11 +691,12 @@ desktop_cb (GtkAction *action,
gdk_screen_width (), gdk_screen_height ());
gtk_window_move (GTK_WINDOW (window), 0, 0);
desktop_color.red = 0x5144;
desktop_color.green = 0x75D6;
desktop_color.blue = 0xA699;
desktop_color.red = 0.32;
desktop_color.green = 0.46;
desktop_color.blue = 0.65;
desktop_color.alpha = 1.0;
gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &desktop_color);
gtk_widget_override_background_color (window, 0, &desktop_color);
label = focus_label (window);

View File

@ -26,6 +26,7 @@
*/
#include "draw-workspace.h"
#include "theme-private.h"
static void
@ -70,13 +71,13 @@ draw_window (GtkWidget *widget,
cairo_t *cr,
const WnckWindowDisplayInfo *win,
const GdkRectangle *winrect,
GtkStateType state)
GtkStateFlags state)
{
GdkPixbuf *icon;
int icon_x, icon_y, icon_w, icon_h;
gboolean is_active;
GdkColor *color;
GtkStyle *style;
GdkRGBA color;
GtkStyleContext *style;
is_active = win->is_active;
@ -85,15 +86,12 @@ draw_window (GtkWidget *widget,
cairo_rectangle (cr, winrect->x, winrect->y, winrect->width, winrect->height);
cairo_clip (cr);
style = gtk_widget_get_style (widget);
style = gtk_widget_get_style_context (widget);
if (is_active)
color = &style->light[state];
meta_gtk_style_get_light_color (style, state, &color);
else
color = &style->bg[state];
cairo_set_source_rgb (cr,
color->red / 65535.,
color->green / 65535.,
color->blue / 65535.);
gtk_style_context_get_background_color (style, state, &color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_rectangle (cr,
winrect->x + 1, winrect->y + 1,
@ -144,15 +142,8 @@ draw_window (GtkWidget *widget,
cairo_restore (cr);
}
if (is_active)
color = &style->fg[state];
else
color = &style->fg[state];
cairo_set_source_rgb (cr,
color->red / 65535.,
color->green / 65535.,
color->blue / 65535.);
gtk_style_context_get_color (style, state, &color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_set_line_width (cr, 1.0);
cairo_rectangle (cr,
winrect->x + 0.5, winrect->y + 0.5,
@ -178,8 +169,8 @@ wnck_draw_workspace (GtkWidget *widget,
{
int i;
GdkRectangle workspace_rect;
GtkStateType state;
GtkStyle *style;
GtkStateFlags state;
GtkStyleContext *style;
workspace_rect.x = x;
workspace_rect.y = y;
@ -187,13 +178,13 @@ wnck_draw_workspace (GtkWidget *widget,
workspace_rect.height = height;
if (is_active)
state = GTK_STATE_SELECTED;
state = GTK_STATE_FLAG_SELECTED;
else if (workspace_background)
state = GTK_STATE_PRELIGHT;
state = GTK_STATE_FLAG_PRELIGHT;
else
state = GTK_STATE_NORMAL;
state = GTK_STATE_FLAG_NORMAL;
style = gtk_widget_get_style (widget);
style = gtk_widget_get_style_context (widget);
cairo_save (cr);
@ -204,7 +195,10 @@ wnck_draw_workspace (GtkWidget *widget,
}
else
{
gdk_cairo_set_source_color (cr, &style->dark[state]);
GdkRGBA color;
meta_gtk_style_get_dark_color (style,state, &color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_rectangle (cr, x, y, width, height);
cairo_fill (cr);
}

View File

@ -25,6 +25,7 @@
#include <config.h>
#include <math.h>
#include <string.h>
#include <meta/boxes.h>
#include "frames.h"
#include <meta/util.h>
@ -187,6 +188,74 @@ prefs_changed_callback (MetaPreference pref,
}
}
static GtkStyleContext *
create_style_context (MetaFrames *frames,
const gchar *variant)
{
GtkStyleContext *style;
GdkScreen *screen;
char *theme_name;
screen = gtk_widget_get_screen (GTK_WIDGET (frames));
g_object_get (gtk_settings_get_for_screen (screen),
"gtk-theme-name", &theme_name,
NULL);
style = gtk_style_context_new ();
gtk_style_context_set_path (style,
gtk_widget_get_path (GTK_WIDGET (frames)));
if (theme_name && *theme_name)
{
GtkCssProvider *provider;
provider = gtk_css_provider_get_named (theme_name, variant);
gtk_style_context_add_provider (style,
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_THEME);
}
g_free (theme_name);
return style;
}
static GtkStyleContext *
meta_frames_get_theme_variant (MetaFrames *frames,
const gchar *variant)
{
GtkStyleContext *style;
style = g_hash_table_lookup (frames->style_variants, variant);
if (style == NULL)
{
style = create_style_context (frames, variant);
g_hash_table_insert (frames->style_variants, g_strdup (variant), style);
}
return style;
}
static void
update_style_contexts (MetaFrames *frames)
{
GtkStyleContext *style;
GList *variants, *variant;
if (frames->normal_style)
g_object_unref (frames->normal_style);
frames->normal_style = create_style_context (frames, NULL);
variants = g_hash_table_get_keys (frames->style_variants);
for (variant = variants; variant; variant = variants->next)
{
style = create_style_context (frames, (char *)variant->data);
g_hash_table_insert (frames->style_variants,
g_strdup (variant->data), style);
}
g_list_free (variants);
}
static void
meta_frames_init (MetaFrames *frames)
{
@ -202,6 +271,9 @@ meta_frames_init (MetaFrames *frames)
frames->invalidate_frames = NULL;
frames->cache = g_hash_table_new (g_direct_hash, g_direct_equal);
frames->style_variants = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, g_object_unref);
gtk_widget_set_double_buffered (GTK_WIDGET (frames), FALSE);
meta_prefs_add_listener (prefs_changed_callback, frames);
@ -241,6 +313,18 @@ meta_frames_destroy (GtkWidget *object)
}
g_slist_free (winlist);
if (frames->normal_style)
{
g_object_unref (frames->normal_style);
frames->normal_style = NULL;
}
if (frames->style_variants)
{
g_hash_table_destroy (frames->style_variants);
frames->style_variants = NULL;
}
GTK_WIDGET_CLASS (meta_frames_parent_class)->destroy (object);
}
@ -429,6 +513,8 @@ meta_frames_style_updated (GtkWidget *widget)
meta_frames_font_changed (frames);
update_style_contexts (frames);
g_hash_table_foreach (frames->frames,
reattach_style_func, frames);
@ -574,10 +660,23 @@ static void
meta_frames_attach_style (MetaFrames *frames,
MetaUIFrame *frame)
{
gboolean has_frame;
char *variant = NULL;
if (frame->style != NULL)
g_object_unref (frame->style);
frame->style = g_object_ref (gtk_widget_get_style_context (GTK_WIDGET (frames)));
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
frame->xwindow,
META_CORE_WINDOW_HAS_FRAME, &has_frame,
META_CORE_GET_THEME_VARIANT, &variant,
META_CORE_GET_END);
if (variant == NULL || strcmp(variant, "normal") == 0)
frame->style = g_object_ref (frames->normal_style);
else
frame->style = g_object_ref (meta_frames_get_theme_variant (frames,
variant));
}
void
@ -596,7 +695,6 @@ meta_frames_manage_window (MetaFrames *frames,
gdk_window_set_user_data (frame->window, frames);
frame->style = NULL;
meta_frames_attach_style (frames, frame);
/* Don't set event mask here, it's in frame.c */
@ -764,6 +862,155 @@ meta_frames_unflicker_bg (MetaFrames *frames,
set_background_none (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow);
}
#ifdef HAVE_SHAPE
static void
apply_cairo_region_to_window (Display *display,
Window xwindow,
cairo_region_t *region,
int op)
{
int n_rects, i;
XRectangle *rects;
n_rects = cairo_region_num_rectangles (region);
rects = g_new (XRectangle, n_rects);
for (i = 0; i < n_rects; i++)
{
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (region, i, &rect);
rects[i].x = rect.x;
rects[i].y = rect.y;
rects[i].width = rect.width;
rects[i].height = rect.height;
}
XShapeCombineRectangles (display, xwindow,
ShapeBounding, 0, 0, rects, n_rects,
op, YXBanded);
g_free (rects);
}
#endif
static cairo_region_t *
get_bounds_region (MetaFrames *frames,
MetaUIFrame *frame,
MetaFrameGeometry *fgeom,
int window_width,
int window_height)
{
cairo_region_t *corners_region;
cairo_region_t *bounds_region;
cairo_rectangle_int_t rect;
corners_region = cairo_region_create ();
if (fgeom->top_left_corner_rounded_radius != 0)
{
const int corner = fgeom->top_left_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
rect.x = 0;
rect.y = i;
rect.width = width;
rect.height = 1;
cairo_region_union_rectangle (corners_region, &rect);
}
}
if (fgeom->top_right_corner_rounded_radius != 0)
{
const int corner = fgeom->top_right_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
rect.x = window_width - width;
rect.y = i;
rect.width = width;
rect.height = 1;
cairo_region_union_rectangle (corners_region, &rect);
}
}
if (fgeom->bottom_left_corner_rounded_radius != 0)
{
const int corner = fgeom->bottom_left_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
rect.x = 0;
rect.y = window_height - i - 1;
rect.width = width;
rect.height = 1;
cairo_region_union_rectangle (corners_region, &rect);
}
}
if (fgeom->bottom_right_corner_rounded_radius != 0)
{
const int corner = fgeom->bottom_right_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
rect.x = window_width - width;
rect.y = window_height - i - 1;
rect.width = width;
rect.height = 1;
cairo_region_union_rectangle (corners_region, &rect);
}
}
bounds_region = cairo_region_create ();
rect.x = 0;
rect.y = 0;
rect.width = window_width;
rect.height = window_height;
cairo_region_union_rectangle (bounds_region, &rect);
cairo_region_subtract (bounds_region, corners_region);
cairo_region_destroy (corners_region);
return bounds_region;
}
static cairo_region_t *
get_client_region (MetaFrameGeometry *fgeom,
int window_width,
int window_height)
{
cairo_rectangle_int_t rect;
rect.x = fgeom->left_width;
rect.y = fgeom->top_height;
rect.width = window_width - fgeom->right_width - rect.x;
rect.height = window_height - fgeom->bottom_height - rect.y;
return cairo_region_create_rectangle (&rect);
}
void
meta_frames_apply_shapes (MetaFrames *frames,
Window xwindow,
@ -775,9 +1022,7 @@ meta_frames_apply_shapes (MetaFrames *frames,
/* Apply shapes as if window had new_window_width, new_window_height */
MetaUIFrame *frame;
MetaFrameGeometry fgeom;
XRectangle xrect;
Region corners_xregion;
Region window_xregion;
cairo_region_t *window_region;
Display *display;
frame = meta_frames_lookup_window (frames, xwindow);
@ -798,7 +1043,7 @@ meta_frames_apply_shapes (MetaFrames *frames,
meta_topic (META_DEBUG_SHAPES,
"Unsetting shape mask on frame 0x%lx\n",
frame->xwindow);
XShapeCombineMask (display, frame->xwindow,
ShapeBounding, 0, 0, None, ShapeSet);
frame->shape_applied = FALSE;
@ -809,97 +1054,14 @@ meta_frames_apply_shapes (MetaFrames *frames,
"Frame 0x%lx still doesn't need a shape mask\n",
frame->xwindow);
}
return; /* nothing to do */
}
corners_xregion = XCreateRegion ();
if (fgeom.top_left_corner_rounded_radius != 0)
{
const int corner = fgeom.top_left_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
xrect.x = 0;
xrect.y = i;
xrect.width = width;
xrect.height = 1;
XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
}
}
window_region = get_bounds_region (frames, frame,
&fgeom,
new_window_width, new_window_height);
if (fgeom.top_right_corner_rounded_radius != 0)
{
const int corner = fgeom.top_right_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
xrect.x = new_window_width - width;
xrect.y = i;
xrect.width = width;
xrect.height = 1;
XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
}
}
if (fgeom.bottom_left_corner_rounded_radius != 0)
{
const int corner = fgeom.bottom_left_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
xrect.x = 0;
xrect.y = new_window_height - i - 1;
xrect.width = width;
xrect.height = 1;
XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
}
}
if (fgeom.bottom_right_corner_rounded_radius != 0)
{
const int corner = fgeom.bottom_right_corner_rounded_radius;
const float radius = sqrt(corner) + corner;
int i;
for (i=0; i<corner; i++)
{
const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
xrect.x = new_window_width - width;
xrect.y = new_window_height - i - 1;
xrect.width = width;
xrect.height = 1;
XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
}
}
window_xregion = XCreateRegion ();
xrect.x = 0;
xrect.y = 0;
xrect.width = new_window_width;
xrect.height = new_window_height;
XUnionRectWithRegion (&xrect, window_xregion, window_xregion);
XSubtractRegion (window_xregion, corners_xregion, window_xregion);
XDestroyRegion (corners_xregion);
if (window_has_shape)
{
/* The client window is oclock or something and has a shape
@ -911,7 +1073,7 @@ meta_frames_apply_shapes (MetaFrames *frames,
XSetWindowAttributes attrs;
Window shape_window;
Window client_window;
Region client_xregion;
cairo_region_t *client_region;
GdkScreen *screen;
int screen_number;
@ -951,21 +1113,16 @@ meta_frames_apply_shapes (MetaFrames *frames,
/* Punch the client area out of the normal frame shape,
* then union it with the shape_window's existing shape
*/
client_xregion = XCreateRegion ();
xrect.x = fgeom.left_width;
xrect.y = fgeom.top_height;
xrect.width = new_window_width - fgeom.right_width - xrect.x;
xrect.height = new_window_height - fgeom.bottom_height - xrect.y;
client_region = get_client_region (&fgeom,
new_window_width,
new_window_height);
XUnionRectWithRegion (&xrect, client_xregion, client_xregion);
XSubtractRegion (window_xregion, client_xregion, window_xregion);
cairo_region_subtract (window_region, client_region);
XDestroyRegion (client_xregion);
XShapeCombineRegion (display, shape_window,
ShapeBounding, 0, 0, window_xregion, ShapeUnion);
cairo_region_destroy (client_region);
apply_cairo_region_to_window (display, shape_window,
window_region, ShapeUnion);
/* Now copy shape_window shape to the real frame */
XShapeCombineShape (display, frame->xwindow, ShapeBounding,
@ -984,16 +1141,35 @@ meta_frames_apply_shapes (MetaFrames *frames,
"Frame 0x%lx has shaped corners\n",
frame->xwindow);
XShapeCombineRegion (display, frame->xwindow,
ShapeBounding, 0, 0, window_xregion, ShapeSet);
apply_cairo_region_to_window (display, frame->xwindow,
window_region, ShapeSet);
}
frame->shape_applied = TRUE;
XDestroyRegion (window_xregion);
cairo_region_destroy (window_region);
#endif /* HAVE_SHAPE */
}
cairo_region_t *
meta_frames_get_frame_bounds (MetaFrames *frames,
Window xwindow,
int window_width,
int window_height)
{
MetaUIFrame *frame;
MetaFrameGeometry fgeom;
frame = meta_frames_lookup_window (frames, xwindow);
g_return_val_if_fail (frame != NULL, NULL);
meta_frames_calc_geometry (frames, frame, &fgeom);
return get_bounds_region (frames, frame,
&fgeom,
window_width, window_height);
}
void
meta_frames_move_resize_frame (MetaFrames *frames,
Window xwindow,
@ -1048,6 +1224,20 @@ meta_frames_set_title (MetaFrames *frames,
invalidate_whole_window (frames, frame);
}
void
meta_frames_update_frame_style (MetaFrames *frames,
Window xwindow)
{
MetaUIFrame *frame;
frame = meta_frames_lookup_window (frames, xwindow);
g_assert (frame);
meta_frames_attach_style (frames, frame);
invalidate_whole_window (frames, frame);
}
void
meta_frames_repaint_frame (MetaFrames *frames,
Window xwindow)
@ -1529,7 +1719,6 @@ meta_frames_button_press_event (GtkWidget *widget,
control == META_FRAME_CONTROL_RESIZE_W))
{
MetaGrabOp op;
gboolean titlebar_is_onscreen;
op = META_GRAB_OP_NONE;
@ -1564,28 +1753,16 @@ meta_frames_button_press_event (GtkWidget *widget,
break;
}
meta_core_get (display, frame->xwindow,
META_CORE_IS_TITLEBAR_ONSCREEN, &titlebar_is_onscreen,
META_CORE_GET_END);
if (!titlebar_is_onscreen)
meta_core_show_window_menu (display,
frame->xwindow,
event->x_root,
event->y_root,
event->button,
event->time);
else
meta_core_begin_grab_op (display,
frame->xwindow,
op,
TRUE,
TRUE,
event->button,
0,
event->time,
event->x_root,
event->y_root);
meta_core_begin_grab_op (display,
frame->xwindow,
op,
TRUE,
TRUE,
event->button,
0,
event->time,
event->x_root,
event->y_root);
}
else if (control == META_FRAME_CONTROL_TITLE &&
event->button == 1)
@ -2444,11 +2621,11 @@ meta_frames_set_window_background (MetaFrames *frames,
if (frame_exists && style->window_background_color != NULL)
{
GdkColor color;
GdkRGBA color;
GdkVisual *visual;
meta_color_spec_render (style->window_background_color,
GTK_WIDGET (frames),
frame->style,
&color);
/* Set A in ARGB to window_background_alpha, if we have ARGB */
@ -2456,11 +2633,10 @@ meta_frames_set_window_background (MetaFrames *frames,
visual = gtk_widget_get_visual (GTK_WIDGET (frames));
if (gdk_visual_get_depth (visual) == 32) /* we have ARGB */
{
color.pixel = (color.pixel & 0xffffff) &
style->window_background_alpha << 24;
color.alpha = style->window_background_alpha / 255.0;
}
gdk_window_set_background (frame->window, &color);
gdk_window_set_background_rgba (frame->window, &color);
}
else
{

View File

@ -98,6 +98,9 @@ struct _MetaFrames
guint tooltip_timeout;
MetaUIFrame *last_motion_frame;
GtkStyleContext *normal_style;
GHashTable *style_variants;
int expose_delay_count;
int invalidate_cache_timeout_id;
@ -124,6 +127,9 @@ void meta_frames_set_title (MetaFrames *frames,
Window xwindow,
const char *title);
void meta_frames_update_frame_style (MetaFrames *frames,
Window xwindow);
void meta_frames_repaint_frame (MetaFrames *frames,
Window xwindow);
@ -144,6 +150,10 @@ void meta_frames_apply_shapes (MetaFrames *frames,
int new_window_width,
int new_window_height,
gboolean window_has_shape);
cairo_region_t *meta_frames_get_frame_bounds (MetaFrames *frames,
Window xwindow,
int window_width,
int window_height);
void meta_frames_move_resize_frame (MetaFrames *frames,
Window xwindow,
int x,

View File

@ -31,27 +31,27 @@
*/
static GdkPixbuf* meta_gradient_create_horizontal (int width,
int height,
const GdkColor *from,
const GdkColor *to);
const GdkRGBA *from,
const GdkRGBA *to);
static GdkPixbuf* meta_gradient_create_vertical (int width,
int height,
const GdkColor *from,
const GdkColor *to);
const GdkRGBA *from,
const GdkRGBA *to);
static GdkPixbuf* meta_gradient_create_diagonal (int width,
int height,
const GdkColor *from,
const GdkColor *to);
const GdkRGBA *from,
const GdkRGBA *to);
static GdkPixbuf* meta_gradient_create_multi_horizontal (int width,
int height,
const GdkColor *colors,
const GdkRGBA *colors,
int count);
static GdkPixbuf* meta_gradient_create_multi_vertical (int width,
int height,
const GdkColor *colors,
const GdkRGBA *colors,
int count);
static GdkPixbuf* meta_gradient_create_multi_diagonal (int width,
int height,
const GdkColor *colors,
const GdkRGBA *colors,
int count);
@ -100,8 +100,8 @@ blank_pixbuf (int width, int height, gboolean no_padding)
GdkPixbuf*
meta_gradient_create_simple (int width,
int height,
const GdkColor *from,
const GdkColor *to,
const GdkRGBA *from,
const GdkRGBA *to,
MetaGradientType style)
{
switch (style)
@ -136,7 +136,7 @@ meta_gradient_create_simple (int width,
GdkPixbuf*
meta_gradient_create_multi (int width,
int height,
const GdkColor *colors,
const GdkRGBA *colors,
int n_colors,
MetaGradientType style)
{
@ -181,9 +181,9 @@ meta_gradient_create_multi (int width,
GdkPixbuf*
meta_gradient_create_interwoven (int width,
int height,
const GdkColor colors1[2],
const GdkRGBA colors1[2],
int thickness1,
const GdkColor colors2[2],
const GdkRGBA colors2[2],
int thickness2)
{
@ -202,21 +202,21 @@ meta_gradient_create_interwoven (int width,
pixels = gdk_pixbuf_get_pixels (pixbuf);
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
r1 = colors1[0].red<<8;
g1 = colors1[0].green<<8;
b1 = colors1[0].blue<<8;
r1 = (long)(colors1[0].red*0xffffff);
g1 = (long)(colors1[0].green*0xffffff);
b1 = (long)(colors1[0].blue*0xffffff);
r2 = colors2[0].red<<8;
g2 = colors2[0].green<<8;
b2 = colors2[0].blue<<8;
r2 = (long)(colors2[0].red*0xffffff);
g2 = (long)(colors2[0].green*0xffffff);
b2 = (long)(colors2[0].blue*0xffffff);
dr1 = ((colors1[1].red-colors1[0].red)<<8)/(int)height;
dg1 = ((colors1[1].green-colors1[0].green)<<8)/(int)height;
db1 = ((colors1[1].blue-colors1[0].blue)<<8)/(int)height;
dr1 = ((colors1[1].red-colors1[0].red)*0xffffff)/(int)height;
dg1 = ((colors1[1].green-colors1[0].green)*0xffffff)/(int)height;
db1 = ((colors1[1].blue-colors1[0].blue)*0xffffff)/(int)height;
dr2 = ((colors2[1].red-colors2[0].red)<<8)/(int)height;
dg2 = ((colors2[1].green-colors2[0].green)<<8)/(int)height;
db2 = ((colors2[1].blue-colors2[0].blue)<<8)/(int)height;
dr2 = ((colors2[1].red-colors2[0].red)*0xffffff)/(int)height;
dg2 = ((colors2[1].green-colors2[0].green)*0xffffff)/(int)height;
db2 = ((colors2[1].blue-colors2[0].blue)*0xffffff)/(int)height;
for (i=0,k=0,l=0,ll=thickness1; i<height; i++)
{
@ -280,8 +280,8 @@ meta_gradient_create_interwoven (int width,
*/
static GdkPixbuf*
meta_gradient_create_horizontal (int width, int height,
const GdkColor *from,
const GdkColor *to)
const GdkRGBA *from,
const GdkRGBA *to)
{
int i;
long r, g, b, dr, dg, db;
@ -300,12 +300,12 @@ meta_gradient_create_horizontal (int width, int height,
ptr = pixels;
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
r0 = (guchar) (from->red / 256.0);
g0 = (guchar) (from->green / 256.0);
b0 = (guchar) (from->blue / 256.0);
rf = (guchar) (to->red / 256.0);
gf = (guchar) (to->green / 256.0);
bf = (guchar) (to->blue / 256.0);
r0 = (guchar) (from->red * 0xff);
g0 = (guchar) (from->green * 0xff);
b0 = (guchar) (from->blue * 0xff);
rf = (guchar) (to->red * 0xff);
gf = (guchar) (to->green * 0xff);
bf = (guchar) (to->blue * 0xff);
r = r0 << 16;
g = g0 << 16;
@ -348,8 +348,8 @@ meta_gradient_create_horizontal (int width, int height,
*/
static GdkPixbuf*
meta_gradient_create_vertical (int width, int height,
const GdkColor *from,
const GdkColor *to)
const GdkRGBA *from,
const GdkRGBA *to)
{
int i, j;
long r, g, b, dr, dg, db;
@ -367,12 +367,12 @@ meta_gradient_create_vertical (int width, int height,
pixels = gdk_pixbuf_get_pixels (pixbuf);
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
r0 = (guchar) (from->red / 256.0);
g0 = (guchar) (from->green / 256.0);
b0 = (guchar) (from->blue / 256.0);
rf = (guchar) (to->red / 256.0);
gf = (guchar) (to->green / 256.0);
bf = (guchar) (to->blue / 256.0);
r0 = (guchar) (from->red * 0xff);
g0 = (guchar) (from->green * 0xff);
b0 = (guchar) (from->blue * 0xff);
rf = (guchar) (to->red * 0xff);
gf = (guchar) (to->green * 0xff);
bf = (guchar) (to->blue * 0xff);
r = r0<<16;
g = g0<<16;
@ -419,8 +419,8 @@ meta_gradient_create_vertical (int width, int height,
static GdkPixbuf*
meta_gradient_create_diagonal (int width, int height,
const GdkColor *from,
const GdkColor *to)
const GdkRGBA *from,
const GdkRGBA *to)
{
GdkPixbuf *pixbuf, *tmp;
int j;
@ -467,7 +467,7 @@ meta_gradient_create_diagonal (int width, int height,
static GdkPixbuf*
meta_gradient_create_multi_horizontal (int width, int height,
const GdkColor *colors,
const GdkRGBA *colors,
int count)
{
int i, j, k;
@ -498,16 +498,16 @@ meta_gradient_create_multi_horizontal (int width, int height,
k = 0;
r = colors[0].red << 8;
g = colors[0].green << 8;
b = colors[0].blue << 8;
r = (long)(colors[0].red * 0xffffff);
g = (long)(colors[0].green * 0xffffff);
b = (long)(colors[0].blue * 0xffffff);
/* render the first line */
for (i=1; i<count; i++)
{
dr = ((int)(colors[i].red - colors[i-1].red) <<8)/(int)width2;
dg = ((int)(colors[i].green - colors[i-1].green)<<8)/(int)width2;
db = ((int)(colors[i].blue - colors[i-1].blue) <<8)/(int)width2;
dr = (int)((colors[i].red - colors[i-1].red) *0xffffff)/(int)width2;
dg = (int)((colors[i].green - colors[i-1].green)*0xffffff)/(int)width2;
db = (int)((colors[i].blue - colors[i-1].blue) *0xffffff)/(int)width2;
for (j=0; j<width2; j++)
{
*ptr++ = (unsigned char)(r>>16);
@ -518,9 +518,9 @@ meta_gradient_create_multi_horizontal (int width, int height,
b += db;
k++;
}
r = colors[i].red << 8;
g = colors[i].green << 8;
b = colors[i].blue << 8;
r = (long)(colors[i].red * 0xffffff);
g = (long)(colors[i].green * 0xffffff);
b = (long)(colors[i].blue * 0xffffff);
}
for (j=k; j<width; j++)
{
@ -539,7 +539,7 @@ meta_gradient_create_multi_horizontal (int width, int height,
static GdkPixbuf*
meta_gradient_create_multi_vertical (int width, int height,
const GdkColor *colors,
const GdkRGBA *colors,
int count)
{
int i, j, k;
@ -570,15 +570,15 @@ meta_gradient_create_multi_vertical (int width, int height,
k = 0;
r = colors[0].red << 8;
g = colors[0].green << 8;
b = colors[0].blue << 8;
r = (long)(colors[0].red * 0xffffff);
g = (long)(colors[0].green * 0xffffff);
b = (long)(colors[0].blue * 0xffffff);
for (i=1; i<count; i++)
{
dr = ((int)(colors[i].red - colors[i-1].red) <<8)/(int)height2;
dg = ((int)(colors[i].green - colors[i-1].green)<<8)/(int)height2;
db = ((int)(colors[i].blue - colors[i-1].blue) <<8)/(int)height2;
dr = (int)((colors[i].red - colors[i-1].red) *0xffffff)/(int)height2;
dg = (int)((colors[i].green - colors[i-1].green)*0xffffff)/(int)height2;
db = (int)((colors[i].blue - colors[i-1].blue) *0xffffff)/(int)height2;
for (j=0; j<height2; j++)
{
@ -597,9 +597,9 @@ meta_gradient_create_multi_vertical (int width, int height,
b += db;
k++;
}
r = colors[i].red << 8;
g = colors[i].green << 8;
b = colors[i].blue << 8;
r = (long)(colors[i].red * 0xffffff);
g = (long)(colors[i].green * 0xffffff);
b = (long)(colors[i].blue * 0xffffff);
}
if (k<height)
@ -629,7 +629,7 @@ meta_gradient_create_multi_vertical (int width, int height,
static GdkPixbuf*
meta_gradient_create_multi_diagonal (int width, int height,
const GdkColor *colors,
const GdkRGBA *colors,
int count)
{
GdkPixbuf *pixbuf, *tmp;

View File

@ -33,18 +33,20 @@ draw_checkerboard (cairo_t *cr,
int height)
{
gint i, j, xcount, ycount;
GdkColor color1, color2;
GdkRGBA color1, color2;
#define CHECK_SIZE 10
#define SPACING 2
color1.red = 30000;
color1.green = 30000;
color1.blue = 30000;
color1.red = 30000. / 65535.;
color1.green = 30000. / 65535.;
color1.blue = 30000. / 65535.;
color1.alpha = 1.0;
color2.red = 50000;
color2.green = 50000;
color2.blue = 50000;
color2.red = 50000. / 65535.;
color2.green = 50000. / 65535.;
color2.blue = 50000. / 65535.;
color2.alpha = 1.0;
xcount = 0;
i = SPACING;
@ -55,9 +57,9 @@ draw_checkerboard (cairo_t *cr,
while (j < height)
{
if (ycount % 2)
gdk_cairo_set_source_color (cr, &color1);
gdk_cairo_set_source_rgba (cr, &color1);
else
gdk_cairo_set_source_color (cr, &color2);
gdk_cairo_set_source_rgba (cr, &color2);
/* If we're outside event->area, this will do nothing.
* It might be mildly more efficient if we handled
@ -82,10 +84,10 @@ render_simple (cairo_t *cr,
gboolean with_alpha)
{
GdkPixbuf *pixbuf;
GdkColor from, to;
GdkRGBA from, to;
gdk_color_parse ("blue", &from);
gdk_color_parse ("green", &to);
gdk_rgba_parse (&from, "blue");
gdk_rgba_parse (&to, "green");
pixbuf = meta_gradient_create_simple (width, height,
&from, &to,
@ -153,13 +155,13 @@ render_multi (cairo_t *cr,
{
GdkPixbuf *pixbuf;
#define N_COLORS 5
GdkColor colors[N_COLORS];
GdkRGBA colors[N_COLORS];
gdk_color_parse ("red", &colors[0]);
gdk_color_parse ("blue", &colors[1]);
gdk_color_parse ("orange", &colors[2]);
gdk_color_parse ("pink", &colors[3]);
gdk_color_parse ("green", &colors[4]);
gdk_rgba_parse (&colors[0], "red");
gdk_rgba_parse (&colors[1], "blue");
gdk_rgba_parse (&colors[2], "orange");
gdk_rgba_parse (&colors[3], "pink");
gdk_rgba_parse (&colors[4], "green");
pixbuf = meta_gradient_create_multi (width, height,
colors, N_COLORS,
@ -200,12 +202,12 @@ render_interwoven_func (cairo_t *cr,
{
GdkPixbuf *pixbuf;
#define N_COLORS 4
GdkColor colors[N_COLORS];
GdkRGBA colors[N_COLORS];
gdk_color_parse ("red", &colors[0]);
gdk_color_parse ("blue", &colors[1]);
gdk_color_parse ("pink", &colors[2]);
gdk_color_parse ("green", &colors[3]);
gdk_rgba_parse (&colors[0], "red");
gdk_rgba_parse (&colors[1], "blue");
gdk_rgba_parse (&colors[2], "pink");
gdk_rgba_parse (&colors[3], "green");
pixbuf = meta_gradient_create_interwoven (width, height,
colors, height / 10,
@ -234,7 +236,7 @@ draw_callback (GtkWidget *widget,
gtk_style_context_lookup_color (style, "foreground-color", &color);
gtk_style_context_restore (style);
cairo_set_source_rgba (cr, color.red, color.green, color.blue, color.alpha);
gdk_cairo_set_source_rgba (cr, &color);
(* func) (cr,
gtk_widget_get_allocated_width (widget),

View File

@ -38,7 +38,7 @@
* look out for.
*/
#define THEME_MAJOR_VERSION 3
#define THEME_MINOR_VERSION 3
#define THEME_MINOR_VERSION 4
#define THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION)
#define METACITY_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"
@ -2320,7 +2320,7 @@ parse_draw_op_element (GMarkupParseContext *context,
const char *height;
const char *filled;
gboolean filled_val;
GtkStateType state_val;
GtkStateFlags state_val;
GtkShadowType shadow_val;
GtkArrowType arrow_val;
@ -2410,7 +2410,7 @@ parse_draw_op_element (GMarkupParseContext *context,
const char *y;
const char *width;
const char *height;
GtkStateType state_val;
GtkStateFlags state_val;
GtkShadowType shadow_val;
if (!locate_attributes (context, element_name, attribute_names, attribute_values,
@ -2478,7 +2478,7 @@ parse_draw_op_element (GMarkupParseContext *context,
const char *x;
const char *y1;
const char *y2;
GtkStateType state_val;
GtkStateFlags state_val;
if (!locate_attributes (context, element_name, attribute_names, attribute_values,
error,

View File

@ -281,6 +281,7 @@ typedef enum
{
META_COLOR_SPEC_BASIC,
META_COLOR_SPEC_GTK,
META_COLOR_SPEC_GTK_CUSTOM,
META_COLOR_SPEC_BLEND,
META_COLOR_SPEC_SHADE
} MetaColorSpecType;
@ -304,24 +305,28 @@ struct _MetaColorSpec
union
{
struct {
GdkColor color;
GdkRGBA color;
} basic;
struct {
MetaGtkColorComponent component;
GtkStateType state;
GtkStateFlags state;
} gtk;
struct {
char *color_name;
MetaColorSpec *fallback;
} gtkcustom;
struct {
MetaColorSpec *foreground;
MetaColorSpec *background;
double alpha;
GdkColor color;
GdkRGBA color;
} blend;
struct {
MetaColorSpec *base;
double factor;
GdkColor color;
GdkRGBA color;
} shade;
} data;
};
@ -553,7 +558,7 @@ struct _MetaDrawOp
} image;
struct {
GtkStateType state;
GtkStateFlags state;
GtkShadowType shadow;
GtkArrowType arrow;
gboolean filled;
@ -565,7 +570,7 @@ struct _MetaDrawOp
} gtk_arrow;
struct {
GtkStateType state;
GtkStateFlags state;
GtkShadowType shadow;
MetaDrawSpec *x;
MetaDrawSpec *y;
@ -574,7 +579,7 @@ struct _MetaDrawOp
} gtk_box;
struct {
GtkStateType state;
GtkStateFlags state;
MetaDrawSpec *x;
MetaDrawSpec *y1;
MetaDrawSpec *y2;
@ -958,11 +963,11 @@ MetaColorSpec* meta_color_spec_new (MetaColorSpecType type);
MetaColorSpec* meta_color_spec_new_from_string (const char *str,
GError **err);
MetaColorSpec* meta_color_spec_new_gtk (MetaGtkColorComponent component,
GtkStateType state);
GtkStateFlags state);
void meta_color_spec_free (MetaColorSpec *spec);
void meta_color_spec_render (MetaColorSpec *spec,
GtkWidget *widget,
GdkColor *color);
GtkStyleContext *style_gtk,
GdkRGBA *color);
MetaDrawOp* meta_draw_op_new (MetaDrawType type);
@ -1006,7 +1011,7 @@ gboolean meta_draw_op_list_contains (MetaDrawOpList *op_list,
MetaGradientSpec* meta_gradient_spec_new (MetaGradientType type);
void meta_gradient_spec_free (MetaGradientSpec *desc);
GdkPixbuf* meta_gradient_spec_render (const MetaGradientSpec *desc,
GtkWidget *widget,
GtkStyleContext *gtk_style,
int width,
int height);
gboolean meta_gradient_spec_validate (MetaGradientSpec *spec,
@ -1208,8 +1213,8 @@ const char* meta_frame_focus_to_string (MetaFrameFocus f
MetaFrameType meta_frame_type_from_string (const char *str);
MetaGradientType meta_gradient_type_from_string (const char *str);
const char* meta_gradient_type_to_string (MetaGradientType type);
GtkStateType meta_gtk_state_from_string (const char *str);
const char* meta_gtk_state_to_string (GtkStateType state);
GtkStateFlags meta_gtk_state_from_string (const char *str);
const char* meta_gtk_state_to_string (GtkStateFlags state);
GtkShadowType meta_gtk_shadow_from_string (const char *str);
const char* meta_gtk_shadow_to_string (GtkShadowType shadow);
GtkArrowType meta_gtk_arrow_from_string (const char *str);
@ -1217,6 +1222,13 @@ const char* meta_gtk_arrow_to_string (GtkArrowType a
MetaImageFillType meta_image_fill_type_from_string (const char *str);
const char* meta_image_fill_type_to_string (MetaImageFillType fill_type);
void meta_gtk_style_get_light_color (GtkStyleContext *style,
GtkStateFlags state,
GdkRGBA *color);
void meta_gtk_style_get_dark_color (GtkStyleContext *style,
GtkStateFlags state,
GdkRGBA *color);
guint meta_theme_earliest_version_with_button (MetaButtonType type);

View File

@ -355,14 +355,15 @@ border_only_contents (void)
GtkWidget *event_box;
GtkWidget *vbox;
GtkWidget *w;
GdkColor color;
GdkRGBA color;
event_box = gtk_event_box_new ();
color.red = 40000;
color.red = 0.6;
color.green = 0;
color.blue = 40000;
gtk_widget_modify_bg (event_box, GTK_STATE_NORMAL, &color);
color.blue = 0.6;
color.alpha = 1.0;
gtk_widget_override_background_color (event_box, 0, &color);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
@ -477,7 +478,7 @@ preview_collection (int font_size,
{
GtkWidget *box;
GtkWidget *sw;
GdkColor desktop_color;
GdkRGBA desktop_color;
int i;
GtkWidget *eventbox;
@ -495,11 +496,12 @@ preview_collection (int font_size,
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), eventbox);
desktop_color.red = 0x5144;
desktop_color.green = 0x75D6;
desktop_color.blue = 0xA699;
desktop_color.red = 0.32;
desktop_color.green = 0.46;
desktop_color.blue = 0.65;
desktop_color.alpha = 1.0;
gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL, &desktop_color);
gtk_widget_override_background_color (eventbox, 0, &desktop_color);
i = 0;
while (i < META_FRAME_TYPE_LAST)
@ -694,7 +696,7 @@ previews_of_button_layouts (void)
static gboolean initted = FALSE;
GtkWidget *box;
GtkWidget *sw;
GdkColor desktop_color;
GdkRGBA desktop_color;
int i;
GtkWidget *eventbox;
@ -718,11 +720,12 @@ previews_of_button_layouts (void)
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), eventbox);
desktop_color.red = 0x5144;
desktop_color.green = 0x75D6;
desktop_color.blue = 0xA699;
desktop_color.red = 0.32;
desktop_color.green = 0.46;
desktop_color.blue = 0.65;
desktop_color.alpha = 1.0;
gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL, &desktop_color);
gtk_widget_override_background_color (eventbox, 0, &desktop_color);
i = 0;
while (i < BUTTON_LAYOUT_COMBINATIONS)

View File

@ -63,14 +63,14 @@
#define GDK_COLOR_RGBA(color) \
((guint32) (0xff | \
(((color).red / 256) << 24) | \
(((color).green / 256) << 16) | \
(((color).blue / 256) << 8)))
((int)((color).red * 255) << 24) | \
((int)((color).green * 255) << 16) | \
((int)((color).blue * 255) << 8)))
#define GDK_COLOR_RGB(color) \
((guint32) ((((color).red / 256) << 16) | \
(((color).green / 256) << 8) | \
(((color).blue / 256))))
((guint32) (((int)((color).red * 255) << 16) | \
((int)((color).green * 255) << 8) | \
((int)((color).blue * 255))))
#define ALPHA_TO_UCHAR(d) ((unsigned char) ((d) * 255))
@ -78,8 +78,8 @@
#define CLAMP_UCHAR(v) ((guchar) (CLAMP (((int)v), (int)0, (int)255)))
#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11)
static void gtk_style_shade (GdkColor *a,
GdkColor *b,
static void gtk_style_shade (GdkRGBA *a,
GdkRGBA *b,
gdouble k);
static void rgb_to_hls (gdouble *r,
gdouble *g,
@ -95,7 +95,7 @@ static MetaTheme *meta_current_theme = NULL;
static GdkPixbuf *
colorize_pixbuf (GdkPixbuf *orig,
GdkColor *new_color)
GdkRGBA *new_color)
{
GdkPixbuf *pixbuf;
double intensity;
@ -138,16 +138,16 @@ colorize_pixbuf (GdkPixbuf *orig,
if (intensity <= 0.5)
{
/* Go from black at intensity = 0.0 to new_color at intensity = 0.5 */
dr = (new_color->red * intensity * 2.0) / 65535.0;
dg = (new_color->green * intensity * 2.0) / 65535.0;
db = (new_color->blue * intensity * 2.0) / 65535.0;
dr = new_color->red * intensity * 2.0;
dg = new_color->green * intensity * 2.0;
db = new_color->blue * intensity * 2.0;
}
else
{
/* Go from new_color at intensity = 0.5 to white at intensity = 1.0 */
dr = (new_color->red + (65535 - new_color->red) * (intensity - 0.5) * 2.0) / 65535.0;
dg = (new_color->green + (65535 - new_color->green) * (intensity - 0.5) * 2.0) / 65535.0;
db = (new_color->blue + (65535 - new_color->blue) * (intensity - 0.5) * 2.0) / 65535.0;
dr = new_color->red + (1.0 - new_color->red) * (intensity - 0.5) * 2.0;
dg = new_color->green + (1.0 - new_color->green) * (intensity - 0.5) * 2.0;
db = new_color->blue + (1.0 - new_color->blue) * (intensity - 0.5) * 2.0;
}
dest[0] = CLAMP_UCHAR (255 * dr);
@ -172,18 +172,15 @@ colorize_pixbuf (GdkPixbuf *orig,
}
static void
color_composite (const GdkColor *bg,
const GdkColor *fg,
double alpha_d,
GdkColor *color)
color_composite (const GdkRGBA *bg,
const GdkRGBA *fg,
double alpha,
GdkRGBA *color)
{
guint16 alpha;
*color = *bg;
alpha = alpha_d * 0xffff;
color->red = color->red + (((fg->red - color->red) * alpha + 0x8000) >> 16);
color->green = color->green + (((fg->green - color->green) * alpha + 0x8000) >> 16);
color->blue = color->blue + (((fg->blue - color->blue) * alpha + 0x8000) >> 16);
color->red = color->red + (fg->red - color->red) * alpha;
color->green = color->green + (fg->green - color->green) * alpha;
color->blue = color->blue + (fg->blue - color->blue) * alpha;
}
/**
@ -1015,12 +1012,12 @@ meta_gradient_spec_free (MetaGradientSpec *spec)
GdkPixbuf*
meta_gradient_spec_render (const MetaGradientSpec *spec,
GtkWidget *widget,
GtkStyleContext *style,
int width,
int height)
{
int n_colors;
GdkColor *colors;
GdkRGBA *colors;
GSList *tmp;
int i;
GdkPixbuf *pixbuf;
@ -1030,13 +1027,13 @@ meta_gradient_spec_render (const MetaGradientSpec *spec,
if (n_colors == 0)
return NULL;
colors = g_new (GdkColor, n_colors);
colors = g_new (GdkRGBA, n_colors);
i = 0;
tmp = spec->color_specs;
while (tmp != NULL)
{
meta_color_spec_render (tmp->data, widget, &colors[i]);
meta_color_spec_render (tmp->data, style, &colors[i]);
tmp = tmp->next;
++i;
@ -1121,6 +1118,10 @@ meta_color_spec_new (MetaColorSpecType type)
size += sizeof (dummy.data.gtk);
break;
case META_COLOR_SPEC_GTK_CUSTOM:
size += sizeof (dummy.data.gtkcustom);
break;
case META_COLOR_SPEC_BLEND:
size += sizeof (dummy.data.blend);
break;
@ -1152,6 +1153,14 @@ meta_color_spec_free (MetaColorSpec *spec)
DEBUG_FILL_STRUCT (&spec->data.gtk);
break;
case META_COLOR_SPEC_GTK_CUSTOM:
if (spec->data.gtkcustom.color_name)
g_free (spec->data.gtkcustom.color_name);
if (spec->data.gtkcustom.fallback)
meta_color_spec_free (spec->data.gtkcustom.fallback);
DEBUG_FILL_STRUCT (&spec->data.gtkcustom);
break;
case META_COLOR_SPEC_BLEND:
if (spec->data.blend.foreground)
meta_color_spec_free (spec->data.blend.foreground);
@ -1182,13 +1191,74 @@ meta_color_spec_new_from_string (const char *str,
spec = NULL;
if (str[0] == 'g' && str[1] == 't' && str[2] == 'k' && str[3] == ':')
if (str[0] == 'g' && str[1] == 't' && str[2] == 'k' && str[3] == ':' &&
str[4] == 'c' && str[5] == 'u' && str[6] == 's' && str[7] == 't' &&
str[8] == 'o' && str[9] == 'm')
{
const char *color_name_start, *fallback_str_start, *end;
char *color_name, *fallback_str;
MetaColorSpec *fallback = NULL;
if (str[10] != '(')
{
g_set_error (err, META_THEME_ERROR,
META_THEME_ERROR_FAILED,
_("GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""),
str);
return NULL;
}
color_name_start = str + 11;
fallback_str_start = color_name_start;
while (*fallback_str_start && *fallback_str_start != ',')
{
if (!(g_ascii_isalnum (*fallback_str_start)
|| *fallback_str_start == '-'
|| *fallback_str_start == '_'))
{
g_set_error (err, META_THEME_ERROR,
META_THEME_ERROR_FAILED,
_("Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"),
*fallback_str_start);
return NULL;
}
fallback_str_start++;
}
fallback_str_start++;
end = strrchr (str, ')');
if (color_name_start == NULL || fallback_str_start == NULL || end == NULL)
{
g_set_error (err, META_THEME_ERROR,
META_THEME_ERROR_FAILED,
_("Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"),
str);
return NULL;
}
fallback_str = g_strndup (fallback_str_start, end - fallback_str_start);
fallback = meta_color_spec_new_from_string (fallback_str, err);
g_free (fallback_str);
if (fallback == NULL)
return NULL;
color_name = g_strndup (color_name_start,
fallback_str_start - color_name_start - 1);
spec = meta_color_spec_new (META_COLOR_SPEC_GTK_CUSTOM);
spec->data.gtkcustom.color_name = color_name;
spec->data.gtkcustom.fallback = fallback;
}
else if (str[0] == 'g' && str[1] == 't' && str[2] == 'k' && str[3] == ':')
{
/* GTK color */
const char *bracket;
const char *end_bracket;
char *tmp;
GtkStateType state;
GtkStateFlags state;
MetaGtkColorComponent component;
bracket = str;
@ -1381,7 +1451,7 @@ meta_color_spec_new_from_string (const char *str,
{
spec = meta_color_spec_new (META_COLOR_SPEC_BASIC);
if (!gdk_color_parse (str, &spec->data.basic.color))
if (!gdk_rgba_parse (&spec->data.basic.color, str))
{
g_set_error (err, META_THEME_ERROR,
META_THEME_ERROR_FAILED,
@ -1403,7 +1473,7 @@ meta_color_spec_new_from_string (const char *str,
*/
MetaColorSpec*
meta_color_spec_new_gtk (MetaGtkColorComponent component,
GtkStateType state)
GtkStateFlags state)
{
MetaColorSpec *spec;
@ -1415,18 +1485,90 @@ meta_color_spec_new_gtk (MetaGtkColorComponent component,
return spec;
}
/* Based on set_color() in gtkstyle.c */
#define LIGHTNESS_MULT 1.3
#define DARKNESS_MULT 0.7
void
meta_color_spec_render (MetaColorSpec *spec,
GtkWidget *widget,
GdkColor *color)
meta_gtk_style_get_light_color (GtkStyleContext *style,
GtkStateFlags state,
GdkRGBA *color)
{
GtkStyle *style;
gtk_style_context_get_background_color (style, state, color);
gtk_style_shade (color, color, LIGHTNESS_MULT);
}
style = gtk_widget_get_style (widget);
void
meta_gtk_style_get_dark_color (GtkStyleContext *style,
GtkStateFlags state,
GdkRGBA *color)
{
gtk_style_context_get_background_color (style, state, color);
gtk_style_shade (color, color, DARKNESS_MULT);
}
static void
meta_set_color_from_style (GdkRGBA *color,
GtkStyleContext *context,
GtkStateFlags state,
MetaGtkColorComponent component)
{
GdkRGBA other;
switch (component)
{
case META_GTK_COLOR_BG:
case META_GTK_COLOR_BASE:
gtk_style_context_get_background_color (context, state, color);
break;
case META_GTK_COLOR_FG:
case META_GTK_COLOR_TEXT:
gtk_style_context_get_color (context, state, color);
break;
case META_GTK_COLOR_TEXT_AA:
gtk_style_context_get_color (context, state, color);
meta_set_color_from_style (&other, context, state, META_GTK_COLOR_BASE);
color->red = (color->red + other.red) / 2;
color->green = (color->green + other.green) / 2;
color->blue = (color->blue + other.blue) / 2;
break;
case META_GTK_COLOR_MID:
meta_gtk_style_get_light_color (context, state, color);
meta_gtk_style_get_dark_color (context, state, &other);
color->red = (color->red + other.red) / 2;
color->green = (color->green + other.green) / 2;
color->blue = (color->blue + other.blue) / 2;
break;
case META_GTK_COLOR_LIGHT:
meta_gtk_style_get_light_color (context, state, color);
break;
case META_GTK_COLOR_DARK:
meta_gtk_style_get_dark_color (context, state, color);
break;
case META_GTK_COLOR_LAST:
g_assert_not_reached ();
break;
}
}
static void
meta_set_custom_color_from_style (GdkRGBA *color,
GtkStyleContext *context,
char *color_name,
MetaColorSpec *fallback)
{
if (!gtk_style_context_lookup_color (context, color_name, color))
meta_color_spec_render (fallback, context, color);
}
void
meta_color_spec_render (MetaColorSpec *spec,
GtkStyleContext *context,
GdkRGBA *color)
{
g_return_if_fail (spec != NULL);
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (style != NULL);
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
switch (spec->type)
{
@ -1435,44 +1577,25 @@ meta_color_spec_render (MetaColorSpec *spec,
break;
case META_COLOR_SPEC_GTK:
switch (spec->data.gtk.component)
{
case META_GTK_COLOR_BG:
*color = style->bg[spec->data.gtk.state];
break;
case META_GTK_COLOR_FG:
*color = style->fg[spec->data.gtk.state];
break;
case META_GTK_COLOR_BASE:
*color = style->base[spec->data.gtk.state];
break;
case META_GTK_COLOR_TEXT:
*color = style->text[spec->data.gtk.state];
break;
case META_GTK_COLOR_LIGHT:
*color = style->light[spec->data.gtk.state];
break;
case META_GTK_COLOR_DARK:
*color = style->dark[spec->data.gtk.state];
break;
case META_GTK_COLOR_MID:
*color = style->mid[spec->data.gtk.state];
break;
case META_GTK_COLOR_TEXT_AA:
*color = style->text_aa[spec->data.gtk.state];
break;
case META_GTK_COLOR_LAST:
g_assert_not_reached ();
break;
}
meta_set_color_from_style (color,
context,
spec->data.gtk.state,
spec->data.gtk.component);
break;
case META_COLOR_SPEC_GTK_CUSTOM:
meta_set_custom_color_from_style (color,
context,
spec->data.gtkcustom.color_name,
spec->data.gtkcustom.fallback);
break;
case META_COLOR_SPEC_BLEND:
{
GdkColor bg, fg;
GdkRGBA bg, fg;
meta_color_spec_render (spec->data.blend.background, widget, &bg);
meta_color_spec_render (spec->data.blend.foreground, widget, &fg);
meta_color_spec_render (spec->data.blend.background, context, &bg);
meta_color_spec_render (spec->data.blend.foreground, context, &fg);
color_composite (&bg, &fg, spec->data.blend.alpha,
&spec->data.blend.color);
@ -1483,7 +1606,7 @@ meta_color_spec_render (MetaColorSpec *spec,
case META_COLOR_SPEC_SHADE:
{
meta_color_spec_render (spec->data.shade.base, widget,
meta_color_spec_render (spec->data.shade.base, context,
&spec->data.shade.color);
gtk_style_shade (&spec->data.shade.color,
@ -2639,11 +2762,13 @@ meta_theme_replace_constants (MetaTheme *theme,
{
if (meta_theme_lookup_int_constant (theme, t->d.v.name, &ival))
{
g_free (t->d.v.name);
t->type = POS_TOKEN_INT;
t->d.i.val = ival;
}
else if (meta_theme_lookup_float_constant (theme, t->d.v.name, &dval))
{
g_free (t->d.v.name);
t->type = POS_TOKEN_DOUBLE;
t->d.d.val = dval;
}
@ -3253,7 +3378,7 @@ scale_and_alpha_pixbuf (GdkPixbuf *src,
static GdkPixbuf*
draw_op_as_pixbuf (const MetaDrawOp *op,
GtkWidget *widget,
GtkStyleContext *context,
const MetaDrawInfo *info,
int width,
int height)
@ -3274,10 +3399,10 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
case META_DRAW_RECTANGLE:
if (op->data.rectangle.filled)
{
GdkColor color;
GdkRGBA color;
meta_color_spec_render (op->data.rectangle.color_spec,
widget,
context,
&color);
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
@ -3296,12 +3421,12 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
case META_DRAW_TINT:
{
GdkColor color;
GdkRGBA color;
guint32 rgba;
gboolean has_alpha;
meta_color_spec_render (op->data.rectangle.color_spec,
widget,
context,
&color);
has_alpha =
@ -3344,7 +3469,7 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
case META_DRAW_GRADIENT:
{
pixbuf = meta_gradient_spec_render (op->data.gradient.gradient_spec,
widget, width, height);
context, width, height);
pixbuf = apply_alpha (pixbuf,
op->data.gradient.alpha_spec,
@ -3357,10 +3482,10 @@ draw_op_as_pixbuf (const MetaDrawOp *op,
{
if (op->data.image.colorize_spec)
{
GdkColor color;
GdkRGBA color;
meta_color_spec_render (op->data.image.colorize_spec,
widget, &color);
context, &color);
if (op->data.image.colorize_cache_pixbuf == NULL ||
op->data.image.colorize_cache_pixel != GDK_COLOR_RGB (color))
@ -3472,29 +3597,6 @@ fill_env (MetaPositionExprEnv *env,
env->theme = meta_current_theme;
}
static GtkStateFlags
state_flags_from_gtk_state (GtkStateType state)
{
switch (state)
{
case GTK_STATE_NORMAL:
return 0;
case GTK_STATE_PRELIGHT:
return GTK_STATE_FLAG_PRELIGHT;
case GTK_STATE_ACTIVE:
return GTK_STATE_FLAG_ACTIVE;
case GTK_STATE_SELECTED:
return GTK_STATE_FLAG_SELECTED;
case GTK_STATE_INSENSITIVE:
return GTK_STATE_FLAG_INSENSITIVE;
case GTK_STATE_INCONSISTENT:
return GTK_STATE_FLAG_INCONSISTENT;
case GTK_STATE_FOCUSED:
return GTK_STATE_FLAG_FOCUSED;
}
return 0;
}
/* This code was originally rendering anti-aliased using X primitives, and
* now has been switched to draw anti-aliased using cairo. In general, the
@ -3516,7 +3618,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
MetaRectangle rect,
MetaPositionExprEnv *env)
{
GdkColor color;
GdkRGBA color;
cairo_save (cr);
gtk_style_context_save (style_gtk);
@ -3529,8 +3631,8 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
{
int x1, x2, y1, y2;
meta_color_spec_render (op->data.line.color_spec, widget, &color);
gdk_cairo_set_source_color (cr, &color);
meta_color_spec_render (op->data.line.color_spec, style_gtk, &color);
gdk_cairo_set_source_rgba (cr, &color);
if (op->data.line.width > 0)
cairo_set_line_width (cr, op->data.line.width);
@ -3604,8 +3706,9 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
{
int rx, ry, rwidth, rheight;
meta_color_spec_render (op->data.rectangle.color_spec, widget, &color);
gdk_cairo_set_source_color (cr, &color);
meta_color_spec_render (op->data.rectangle.color_spec,
style_gtk, &color);
gdk_cairo_set_source_rgba (cr, &color);
rx = parse_x_position_unchecked (op->data.rectangle.x, env);
ry = parse_y_position_unchecked (op->data.rectangle.y, env);
@ -3634,8 +3737,8 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
double start_angle, end_angle;
double center_x, center_y;
meta_color_spec_render (op->data.arc.color_spec, widget, &color);
gdk_cairo_set_source_color (cr, &color);
meta_color_spec_render (op->data.arc.color_spec, style_gtk, &color);
gdk_cairo_set_source_rgba (cr, &color);
rx = parse_x_position_unchecked (op->data.arc.x, env);
ry = parse_y_position_unchecked (op->data.arc.y, env);
@ -3689,8 +3792,9 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
if (!needs_alpha)
{
meta_color_spec_render (op->data.tint.color_spec, widget, &color);
gdk_cairo_set_source_color (cr, &color);
meta_color_spec_render (op->data.tint.color_spec,
style_gtk, &color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_rectangle (cr, rx, ry, rwidth, rheight);
cairo_fill (cr);
@ -3699,7 +3803,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
{
GdkPixbuf *pixbuf;
pixbuf = draw_op_as_pixbuf (op, widget, info,
pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@ -3723,7 +3827,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.gradient.width, env);
rheight = parse_size_unchecked (op->data.gradient.height, env);
pixbuf = draw_op_as_pixbuf (op, widget, info,
pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@ -3750,7 +3854,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.image.width, env);
rheight = parse_size_unchecked (op->data.image.height, env);
pixbuf = draw_op_as_pixbuf (op, widget, info,
pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@ -3796,8 +3900,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
return;
}
gtk_style_context_set_state (style_gtk,
state_flags_from_gtk_state (op->data.gtk_arrow.state));
gtk_style_context_set_state (style_gtk, op->data.gtk_arrow.state);
gtk_render_arrow (style_gtk, cr, angle, rx, ry, size);
}
break;
@ -3811,8 +3914,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.gtk_box.width, env);
rheight = parse_size_unchecked (op->data.gtk_box.height, env);
gtk_style_context_set_state (style_gtk,
state_flags_from_gtk_state (op->data.gtk_box.state));
gtk_style_context_set_state (style_gtk, op->data.gtk_box.state);
gtk_render_background (style_gtk, cr, rx, ry, rwidth, rheight);
gtk_render_frame (style_gtk, cr, rx, ry, rwidth, rheight);
}
@ -3826,8 +3928,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
ry1 = parse_y_position_unchecked (op->data.gtk_vline.y1, env);
ry2 = parse_y_position_unchecked (op->data.gtk_vline.y2, env);
gtk_style_context_set_state (style_gtk,
state_flags_from_gtk_state (op->data.gtk_vline.state));
gtk_style_context_set_state (style_gtk, op->data.gtk_vline.state);
gtk_render_line (style_gtk, cr, rx, ry1, rx, ry2);
}
break;
@ -3840,7 +3941,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
rwidth = parse_size_unchecked (op->data.icon.width, env);
rheight = parse_size_unchecked (op->data.icon.height, env);
pixbuf = draw_op_as_pixbuf (op, widget, info,
pixbuf = draw_op_as_pixbuf (op, style_gtk, info,
rwidth, rheight);
if (pixbuf)
@ -3862,8 +3963,9 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
int rx, ry;
PangoRectangle ink_rect, logical_rect;
meta_color_spec_render (op->data.title.color_spec, widget, &color);
gdk_cairo_set_source_color (cr, &color);
meta_color_spec_render (op->data.title.color_spec,
style_gtk, &color);
gdk_cairo_set_source_rgba (cr, &color);
rx = parse_x_position_unchecked (op->data.title.x, env);
ry = parse_y_position_unchecked (op->data.title.y, env);
@ -6312,45 +6414,45 @@ meta_gradient_type_to_string (MetaGradientType type)
return "<unknown>";
}
GtkStateType
GtkStateFlags
meta_gtk_state_from_string (const char *str)
{
if (g_ascii_strcasecmp ("normal", str) == 0)
return GTK_STATE_NORMAL;
return GTK_STATE_FLAG_NORMAL;
else if (g_ascii_strcasecmp ("prelight", str) == 0)
return GTK_STATE_PRELIGHT;
return GTK_STATE_FLAG_PRELIGHT;
else if (g_ascii_strcasecmp ("active", str) == 0)
return GTK_STATE_ACTIVE;
return GTK_STATE_FLAG_ACTIVE;
else if (g_ascii_strcasecmp ("selected", str) == 0)
return GTK_STATE_SELECTED;
return GTK_STATE_FLAG_SELECTED;
else if (g_ascii_strcasecmp ("insensitive", str) == 0)
return GTK_STATE_INSENSITIVE;
return GTK_STATE_FLAG_INSENSITIVE;
else if (g_ascii_strcasecmp ("inconsistent", str) == 0)
return GTK_STATE_INCONSISTENT;
return GTK_STATE_FLAG_INCONSISTENT;
else if (g_ascii_strcasecmp ("focused", str) == 0)
return GTK_STATE_FOCUSED;
return GTK_STATE_FLAG_FOCUSED;
else
return -1; /* hack */
}
const char*
meta_gtk_state_to_string (GtkStateType state)
meta_gtk_state_to_string (GtkStateFlags state)
{
switch (state)
{
case GTK_STATE_NORMAL:
case GTK_STATE_FLAG_NORMAL:
return "NORMAL";
case GTK_STATE_PRELIGHT:
case GTK_STATE_FLAG_PRELIGHT:
return "PRELIGHT";
case GTK_STATE_ACTIVE:
case GTK_STATE_FLAG_ACTIVE:
return "ACTIVE";
case GTK_STATE_SELECTED:
case GTK_STATE_FLAG_SELECTED:
return "SELECTED";
case GTK_STATE_INSENSITIVE:
case GTK_STATE_FLAG_INSENSITIVE:
return "INSENSITIVE";
case GTK_STATE_INCONSISTENT:
case GTK_STATE_FLAG_INCONSISTENT:
return "INCONSISTENT";
case GTK_STATE_FOCUSED:
case GTK_STATE_FLAG_FOCUSED:
return "FOCUSED";
}
@ -6480,17 +6582,17 @@ meta_image_fill_type_to_string (MetaImageFillType fill_type)
* \param k amount to scale lightness and saturation by
*/
static void
gtk_style_shade (GdkColor *a,
GdkColor *b,
gtk_style_shade (GdkRGBA *a,
GdkRGBA *b,
gdouble k)
{
gdouble red;
gdouble green;
gdouble blue;
red = (gdouble) a->red / 65535.0;
green = (gdouble) a->green / 65535.0;
blue = (gdouble) a->blue / 65535.0;
red = a->red;
green = a->green;
blue = a->blue;
rgb_to_hls (&red, &green, &blue);
@ -6508,9 +6610,9 @@ gtk_style_shade (GdkColor *a,
hls_to_rgb (&red, &green, &blue);
b->red = red * 65535.0;
b->green = green * 65535.0;
b->blue = blue * 65535.0;
b->red = red;
b->green = green;
b->blue = blue;
}
/**
@ -6697,7 +6799,7 @@ draw_bg_solid_composite (const MetaTextureSpec *bg,
int width,
int height)
{
GdkColor bg_color;
GdkRGBA bg_color;
g_assert (bg->type == META_TEXTURE_SOLID);
g_assert (fg->type != META_TEXTURE_COMPOSITE);
@ -6711,7 +6813,7 @@ draw_bg_solid_composite (const MetaTextureSpec *bg,
{
case META_TEXTURE_SOLID:
{
GdkColor fg_color;
GdkRGBA fg_color;
meta_color_spec_render (fg->data.solid.color_spec,
widget,

View File

@ -55,11 +55,7 @@ meta_tile_preview_draw (GtkWidget *widget,
if (preview->has_alpha)
{
/* Fill the preview area with a transparent color */
cairo_set_source_rgba (cr,
preview->preview_color->red,
preview->preview_color->green,
preview->preview_color->blue,
preview->preview_color->alpha);
gdk_cairo_set_source_rgba (cr, preview->preview_color);
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
cairo_paint (cr);
@ -189,9 +185,9 @@ meta_tile_preview_show (MetaTilePreview *preview,
gtk_widget_show (preview->preview_window);
window = gtk_widget_get_window (preview->preview_window);
meta_core_lower_beneath_focus_window (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
GDK_WINDOW_XID (window),
gtk_get_current_event_time ());
meta_core_lower_beneath_grab_window (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
GDK_WINDOW_XID (window),
gtk_get_current_event_time ());
old_rect.x = old_rect.y = 0;
old_rect.width = preview->tile_rect.width;

View File

@ -444,6 +444,13 @@ meta_ui_unflicker_frame_bg (MetaUI *ui,
target_width, target_height);
}
void
meta_ui_update_frame_style (MetaUI *ui,
Window xwindow)
{
meta_frames_update_frame_style (ui->frames, xwindow);
}
void
meta_ui_repaint_frame (MetaUI *ui,
Window xwindow)
@ -470,6 +477,16 @@ meta_ui_apply_frame_shape (MetaUI *ui,
window_has_shape);
}
cairo_region_t *
meta_ui_get_frame_bounds (MetaUI *ui,
Window xwindow,
int window_width,
int window_height)
{
return meta_frames_get_frame_bounds (ui->frames, xwindow,
window_width, window_height);
}
void
meta_ui_queue_frame_draw (MetaUI *ui,
Window xwindow)

View File

@ -28,6 +28,7 @@
#include <meta/common.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <cairo.h>
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
@ -104,6 +105,11 @@ void meta_ui_apply_frame_shape (MetaUI *ui,
int new_window_height,
gboolean window_has_shape);
cairo_region_t *meta_ui_get_frame_bounds (MetaUI *ui,
Window xwindow,
int window_width,
int window_height);
void meta_ui_queue_frame_draw (MetaUI *ui,
Window xwindow);
@ -111,6 +117,9 @@ void meta_ui_set_frame_title (MetaUI *ui,
Window xwindow,
const char *title);
void meta_ui_update_frame_style (MetaUI *ui,
Window window);
void meta_ui_repaint_frame (MetaUI *ui,
Window xwindow);