Compare commits
8 Commits
wip/garnac
...
3.0.2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
31e6cdf345 | ||
![]() |
c8aaa5e33e | ||
![]() |
65aa3e3927 | ||
![]() |
b192771b93 | ||
![]() |
c1977b6532 | ||
![]() |
50d1b53267 | ||
![]() |
cbec96a62f | ||
![]() |
a28a5749db |
23
NEWS
23
NEWS
@@ -1,3 +1,26 @@
|
|||||||
|
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
|
3.0.1
|
||||||
=====
|
=====
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.50)
|
|||||||
|
|
||||||
m4_define([mutter_major_version], [3])
|
m4_define([mutter_major_version], [3])
|
||||||
m4_define([mutter_minor_version], [0])
|
m4_define([mutter_minor_version], [0])
|
||||||
m4_define([mutter_micro_version], [1])
|
m4_define([mutter_micro_version], [2])
|
||||||
|
|
||||||
m4_define([mutter_version],
|
m4_define([mutter_version],
|
||||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||||
|
@@ -411,8 +411,6 @@ meta_window_actor_constructed (GObject *object)
|
|||||||
if (format && format->type == PictTypeDirect && format->direct.alphaMask)
|
if (format && format->type == PictTypeDirect && format->direct.alphaMask)
|
||||||
priv->argb32 = TRUE;
|
priv->argb32 = TRUE;
|
||||||
|
|
||||||
meta_window_actor_update_opacity (self);
|
|
||||||
|
|
||||||
if (!priv->actor)
|
if (!priv->actor)
|
||||||
{
|
{
|
||||||
priv->actor = meta_shaped_texture_new ();
|
priv->actor = meta_shaped_texture_new ();
|
||||||
@@ -442,7 +440,7 @@ meta_window_actor_constructed (GObject *object)
|
|||||||
clutter_actor_raise_top (priv->actor);
|
clutter_actor_raise_top (priv->actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
meta_window_actor_update_opacity (self);
|
||||||
meta_window_actor_update_shape (self, priv->shaped);
|
meta_window_actor_update_shape (self, priv->shaped);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -725,7 +723,7 @@ meta_window_actor_paint (ClutterActor *actor)
|
|||||||
params.y_offset + shape_bounds.y,
|
params.y_offset + shape_bounds.y,
|
||||||
shape_bounds.width,
|
shape_bounds.width,
|
||||||
shape_bounds.height,
|
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);
|
priv->shadow_clip);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1690,7 +1688,7 @@ meta_window_actor_get_obscured_region (MetaWindowActor *self)
|
|||||||
{
|
{
|
||||||
MetaWindowActorPrivate *priv = self->priv;
|
MetaWindowActorPrivate *priv = self->priv;
|
||||||
|
|
||||||
if (!priv->argb32 && priv->back_pixmap)
|
if (!priv->argb32 && priv->opacity == 0xff && priv->back_pixmap)
|
||||||
{
|
{
|
||||||
if (priv->shaped)
|
if (priv->shaped)
|
||||||
return priv->shape_region;
|
return priv->shape_region;
|
||||||
@@ -2147,5 +2145,5 @@ meta_window_actor_update_opacity (MetaWindowActor *self)
|
|||||||
opacity = 255;
|
opacity = 255;
|
||||||
|
|
||||||
self->priv->opacity = opacity;
|
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;
|
MetaRegionBuilder builder;
|
||||||
MetaRegionIterator iter;
|
MetaRegionIterator iter;
|
||||||
cairo_rectangle_int_t extents;
|
cairo_rectangle_int_t extents;
|
||||||
cairo_region_t *chunk;
|
|
||||||
|
|
||||||
int last_x;
|
int last_x;
|
||||||
|
|
||||||
@@ -268,16 +267,11 @@ expand_region_inverse (cairo_region_t *region,
|
|||||||
extents.x, extents.y + extents.height, extents.width, 1,
|
extents.x, extents.y + extents.height, extents.width, 1,
|
||||||
x_amount, y_amount, flip);
|
x_amount, y_amount, flip);
|
||||||
|
|
||||||
chunk = NULL;
|
|
||||||
|
|
||||||
last_x = extents.x;
|
last_x = extents.x;
|
||||||
for (meta_region_iterator_init (&iter, region);
|
for (meta_region_iterator_init (&iter, region);
|
||||||
!meta_region_iterator_at_end (&iter);
|
!meta_region_iterator_at_end (&iter);
|
||||||
meta_region_iterator_next (&iter))
|
meta_region_iterator_next (&iter))
|
||||||
{
|
{
|
||||||
if (chunk == NULL)
|
|
||||||
chunk = cairo_region_create ();
|
|
||||||
|
|
||||||
if (iter.rectangle.x > last_x)
|
if (iter.rectangle.x > last_x)
|
||||||
add_expanded_rect (&builder,
|
add_expanded_rect (&builder,
|
||||||
last_x, iter.rectangle.y,
|
last_x, iter.rectangle.y,
|
||||||
|
@@ -76,6 +76,8 @@ compute_above_tab_keycode (Display *xdisplay)
|
|||||||
keyboard = XkbGetKeyboard (xdisplay,
|
keyboard = XkbGetKeyboard (xdisplay,
|
||||||
XkbGBN_ClientSymbolsMask | XkbGBN_KeyNamesMask | XkbGBN_GeometryMask,
|
XkbGBN_ClientSymbolsMask | XkbGBN_KeyNamesMask | XkbGBN_GeometryMask,
|
||||||
XkbUseCoreKbd);
|
XkbUseCoreKbd);
|
||||||
|
if (!keyboard)
|
||||||
|
return best_keycode;
|
||||||
|
|
||||||
geometry = keyboard->geom;
|
geometry = keyboard->geom;
|
||||||
|
|
||||||
|
@@ -349,6 +349,43 @@ set_wm_icon_size_hint (MetaScreen *screen)
|
|||||||
#undef N_VALS
|
#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
|
static void
|
||||||
reload_monitor_infos (MetaScreen *screen)
|
reload_monitor_infos (MetaScreen *screen)
|
||||||
{
|
{
|
||||||
@@ -538,6 +575,8 @@ reload_monitor_infos (MetaScreen *screen)
|
|||||||
screen->monitor_infos[0].rect = screen->rect;
|
screen->monitor_infos[0].rect = screen->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filter_mirrored_monitors (screen);
|
||||||
|
|
||||||
g_assert (screen->n_monitor_infos > 0);
|
g_assert (screen->n_monitor_infos > 0);
|
||||||
g_assert (screen->monitor_infos != NULL);
|
g_assert (screen->monitor_infos != 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
|
static gboolean
|
||||||
meta_window_can_tile_side_by_side (MetaWindow *window)
|
meta_window_can_tile_side_by_side (MetaWindow *window)
|
||||||
{
|
{
|
||||||
const MetaMonitorInfo *monitor;
|
const MetaMonitorInfo *monitor;
|
||||||
MetaRectangle tile_area;
|
MetaRectangle tile_area;
|
||||||
|
|
||||||
if (!META_WINDOW_ALLOWS_RESIZE (window))
|
if (!meta_window_can_tile_maximized (window))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
monitor = meta_screen_get_current_monitor (window->screen);
|
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;
|
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
|
static void
|
||||||
unmaximize_window_before_freeing (MetaWindow *window)
|
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))
|
if (meta_theme_lookup_int_constant (theme, t->d.v.name, &ival))
|
||||||
{
|
{
|
||||||
|
g_free (t->d.v.name);
|
||||||
t->type = POS_TOKEN_INT;
|
t->type = POS_TOKEN_INT;
|
||||||
t->d.i.val = ival;
|
t->d.i.val = ival;
|
||||||
}
|
}
|
||||||
else if (meta_theme_lookup_float_constant (theme, t->d.v.name, &dval))
|
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->type = POS_TOKEN_DOUBLE;
|
||||||
t->d.d.val = dval;
|
t->d.d.val = dval;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user