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