Compare commits
15 Commits
wip/frame-
...
gnome-3-0
Author | SHA1 | Date | |
---|---|---|---|
bc34f0911b | |||
f39a00e1e7 | |||
1e93ff79d8 | |||
4fc474f264 | |||
f1b742d8b7 | |||
75af6fc40c | |||
bbfcde1caa | |||
31e6cdf345 | |||
c8aaa5e33e | |||
65aa3e3927 | |||
b192771b93 | |||
c1977b6532 | |||
50d1b53267 | |||
cbec96a62f | |||
a28a5749db |
32
NEWS
32
NEWS
@ -1,3 +1,35 @@
|
||||
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
|
||||
=====
|
||||
|
||||
|
@ -2,7 +2,7 @@ AC_PREREQ(2.50)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [0])
|
||||
m4_define([mutter_micro_version], [1])
|
||||
m4_define([mutter_micro_version], [2.1])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
|
5581
po/ca@valencia.po
5581
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
1316
po/sr@latin.po
1316
po/sr@latin.po
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
}
|
||||
|
||||
@ -725,7 +723,7 @@ meta_window_actor_paint (ClutterActor *actor)
|
||||
params.y_offset + shape_bounds.y,
|
||||
shape_bounds.width,
|
||||
shape_bounds.height,
|
||||
(clutter_actor_get_paint_opacity (actor) * params.opacity) / 255,
|
||||
(clutter_actor_get_paint_opacity (actor) * params.opacity * priv->opacity) / (255 * 255),
|
||||
priv->shadow_clip);
|
||||
}
|
||||
|
||||
@ -1690,7 +1688,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;
|
||||
@ -2147,5 +2145,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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -3450,13 +3450,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 +3494,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)
|
||||
{
|
||||
|
@ -2639,11 +2639,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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user