Compare commits
17 Commits
wip/carlos
...
gnome-3-12
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ed7680c2f8 | ||
![]() |
9f9d08c21e | ||
![]() |
9d071443c7 | ||
![]() |
31afdd4deb | ||
![]() |
170ff5e2e8 | ||
![]() |
f72f431a99 | ||
![]() |
e1841f722d | ||
![]() |
b850a8075f | ||
![]() |
db0383d19f | ||
![]() |
a175b3c947 | ||
![]() |
554be56639 | ||
![]() |
b4de2458ab | ||
![]() |
49952bdc69 | ||
![]() |
b2fd24a098 | ||
![]() |
fe9d2570d0 | ||
![]() |
b16ac1ba8c | ||
![]() |
330ce648d3 |
23
NEWS
23
NEWS
@@ -1,3 +1,26 @@
|
|||||||
|
3.12.2
|
||||||
|
======
|
||||||
|
* Fix in-fullscreen state when moving between monitors [Florian; #728395]
|
||||||
|
* Fix crash when monitors change during suspend [Giovanni; #725637]
|
||||||
|
* Misc. bug fixes [Florian, Giovanni; #728423, #729732]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Giovanni Campagna, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Christian Kirbach [de], Pau Iranzo [ca]
|
||||||
|
|
||||||
|
3.12.1
|
||||||
|
======
|
||||||
|
* Fix opacity values from _NET_WM_WINDOW_OPACITY [Nirbheek; #727874]
|
||||||
|
* Misc. cleanups [Jasper; #720631]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Nirbheek Chauhan, Jasper St. Pierre
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Inaki Larranaga Murgoitio [eu], marablack3 [el]
|
||||||
|
|
||||||
3.12.0
|
3.12.0
|
||||||
======
|
======
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ AC_CONFIG_MACRO_DIR([m4])
|
|||||||
|
|
||||||
m4_define([mutter_major_version], [3])
|
m4_define([mutter_major_version], [3])
|
||||||
m4_define([mutter_minor_version], [12])
|
m4_define([mutter_minor_version], [12])
|
||||||
m4_define([mutter_micro_version], [0])
|
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])
|
||||||
|
@@ -500,7 +500,8 @@ set_brightness (MetaBackground *self,
|
|||||||
|
|
||||||
priv->brightness = brightness;
|
priv->brightness = brightness;
|
||||||
|
|
||||||
if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
|
if (clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL) &&
|
||||||
|
priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
|
||||||
{
|
{
|
||||||
ensure_pipeline (self);
|
ensure_pipeline (self);
|
||||||
cogl_pipeline_set_uniform_1f (priv->pipeline,
|
cogl_pipeline_set_uniform_1f (priv->pipeline,
|
||||||
@@ -508,6 +509,14 @@ set_brightness (MetaBackground *self,
|
|||||||
"brightness"),
|
"brightness"),
|
||||||
priv->brightness);
|
priv->brightness);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ensure_pipeline (self);
|
||||||
|
CoglColor blend_color;
|
||||||
|
cogl_color_init_from_4f (&blend_color, brightness, brightness, brightness, 1.0);
|
||||||
|
cogl_pipeline_set_layer_combine (priv->pipeline, 1, "RGB=MODULATE(PREVIOUS, CONSTANT) A=REPLACE(PREVIOUS)", NULL);
|
||||||
|
cogl_pipeline_set_layer_combine_constant (priv->pipeline, 1, &blend_color);
|
||||||
|
}
|
||||||
|
|
||||||
clutter_content_invalidate (CLUTTER_CONTENT (self));
|
clutter_content_invalidate (CLUTTER_CONTENT (self));
|
||||||
|
|
||||||
@@ -525,6 +534,9 @@ set_vignette_sharpness (MetaBackground *self,
|
|||||||
|
|
||||||
priv->vignette_sharpness = sharpness;
|
priv->vignette_sharpness = sharpness;
|
||||||
|
|
||||||
|
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
|
||||||
|
return;
|
||||||
|
|
||||||
if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
|
if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
|
||||||
{
|
{
|
||||||
ensure_pipeline (self);
|
ensure_pipeline (self);
|
||||||
@@ -545,6 +557,9 @@ add_vignette (MetaBackground *self)
|
|||||||
MetaBackgroundPrivate *priv = self->priv;
|
MetaBackgroundPrivate *priv = self->priv;
|
||||||
static CoglSnippet *snippet = NULL;
|
static CoglSnippet *snippet = NULL;
|
||||||
|
|
||||||
|
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
|
||||||
|
return;
|
||||||
|
|
||||||
ensure_pipeline (self);
|
ensure_pipeline (self);
|
||||||
|
|
||||||
/* Cogl automatically caches pipelines with no eviction policy,
|
/* Cogl automatically caches pipelines with no eviction policy,
|
||||||
|
@@ -432,6 +432,9 @@ texture_tower_revalidate (MetaTextureTower *tower,
|
|||||||
int level)
|
int level)
|
||||||
{
|
{
|
||||||
texture_tower_revalidate_fbo (tower, level);
|
texture_tower_revalidate_fbo (tower, level);
|
||||||
|
|
||||||
|
tower->invalid[level].x1 = tower->invalid[level].x2 = 0;
|
||||||
|
tower->invalid[level].y1 = tower->invalid[level].y2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -546,6 +546,26 @@ compare_rect_areas (gconstpointer a, gconstpointer b)
|
|||||||
return b_area - a_area; /* positive ret value denotes b > a, ... */
|
return b_area - a_area; /* positive ret value denotes b > a, ... */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ... and another helper for get_minimal_spanning_set_for_region()... */
|
||||||
|
static gboolean
|
||||||
|
check_strut_align (MetaStrut *strut, const MetaRectangle *rect)
|
||||||
|
{
|
||||||
|
/* Check whether @strut actually aligns to the side of @rect it claims */
|
||||||
|
switch (strut->side)
|
||||||
|
{
|
||||||
|
case META_SIDE_TOP:
|
||||||
|
return BOX_TOP (strut->rect) <= BOX_TOP (*rect);
|
||||||
|
case META_SIDE_BOTTOM:
|
||||||
|
return BOX_BOTTOM (strut->rect) >= BOX_BOTTOM (*rect);
|
||||||
|
case META_SIDE_LEFT:
|
||||||
|
return BOX_LEFT (strut->rect) <= BOX_LEFT (*rect);
|
||||||
|
case META_SIDE_RIGHT:
|
||||||
|
return BOX_RIGHT (strut->rect) >= BOX_RIGHT (*rect);
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* meta_rectangle_get_minimal_spanning_set_for_region:
|
* meta_rectangle_get_minimal_spanning_set_for_region:
|
||||||
* @basic_rect: Input rectangle
|
* @basic_rect: Input rectangle
|
||||||
@@ -630,7 +650,8 @@ meta_rectangle_get_minimal_spanning_set_for_region (
|
|||||||
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
|
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
|
||||||
{
|
{
|
||||||
GList *rect_iter;
|
GList *rect_iter;
|
||||||
MetaRectangle *strut_rect = &((MetaStrut*)strut_iter->data)->rect;
|
MetaStrut *strut = (MetaStrut*)strut_iter->data;
|
||||||
|
MetaRectangle *strut_rect = &strut->rect;
|
||||||
|
|
||||||
tmp_list = ret;
|
tmp_list = ret;
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
@@ -638,7 +659,9 @@ meta_rectangle_get_minimal_spanning_set_for_region (
|
|||||||
while (rect_iter)
|
while (rect_iter)
|
||||||
{
|
{
|
||||||
MetaRectangle *rect = (MetaRectangle*) rect_iter->data;
|
MetaRectangle *rect = (MetaRectangle*) rect_iter->data;
|
||||||
if (!meta_rectangle_overlap (rect, strut_rect))
|
|
||||||
|
if (!meta_rectangle_overlap (strut_rect, rect) ||
|
||||||
|
!check_strut_align (strut, basic_rect))
|
||||||
ret = g_list_prepend (ret, rect);
|
ret = g_list_prepend (ret, rect);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -2522,7 +2522,19 @@ handle_switch_to_workspace (MetaDisplay *display,
|
|||||||
gint which = binding->handler->data;
|
gint which = binding->handler->data;
|
||||||
MetaWorkspace *workspace;
|
MetaWorkspace *workspace;
|
||||||
|
|
||||||
|
if (which < 0)
|
||||||
|
{
|
||||||
|
/* Negative workspace numbers are directions with respect to the
|
||||||
|
* current workspace.
|
||||||
|
*/
|
||||||
|
|
||||||
|
workspace = meta_workspace_get_neighbor (screen->active_workspace,
|
||||||
|
which);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
workspace = meta_screen_get_workspace_by_index (screen, which);
|
workspace = meta_screen_get_workspace_by_index (screen, which);
|
||||||
|
}
|
||||||
|
|
||||||
if (workspace)
|
if (workspace)
|
||||||
{
|
{
|
||||||
@@ -3359,28 +3371,28 @@ init_builtin_key_bindings (MetaDisplay *display)
|
|||||||
common_keybindings,
|
common_keybindings,
|
||||||
META_KEY_BINDING_NONE,
|
META_KEY_BINDING_NONE,
|
||||||
META_KEYBINDING_ACTION_WORKSPACE_LEFT,
|
META_KEYBINDING_ACTION_WORKSPACE_LEFT,
|
||||||
NULL, 0);
|
handle_switch_to_workspace, META_MOTION_LEFT);
|
||||||
|
|
||||||
add_builtin_keybinding (display,
|
add_builtin_keybinding (display,
|
||||||
"switch-to-workspace-right",
|
"switch-to-workspace-right",
|
||||||
common_keybindings,
|
common_keybindings,
|
||||||
META_KEY_BINDING_NONE,
|
META_KEY_BINDING_NONE,
|
||||||
META_KEYBINDING_ACTION_WORKSPACE_RIGHT,
|
META_KEYBINDING_ACTION_WORKSPACE_RIGHT,
|
||||||
NULL, 0);
|
handle_switch_to_workspace, META_MOTION_RIGHT);
|
||||||
|
|
||||||
add_builtin_keybinding (display,
|
add_builtin_keybinding (display,
|
||||||
"switch-to-workspace-up",
|
"switch-to-workspace-up",
|
||||||
common_keybindings,
|
common_keybindings,
|
||||||
META_KEY_BINDING_NONE,
|
META_KEY_BINDING_NONE,
|
||||||
META_KEYBINDING_ACTION_WORKSPACE_UP,
|
META_KEYBINDING_ACTION_WORKSPACE_UP,
|
||||||
NULL, 0);
|
handle_switch_to_workspace, META_MOTION_UP);
|
||||||
|
|
||||||
add_builtin_keybinding (display,
|
add_builtin_keybinding (display,
|
||||||
"switch-to-workspace-down",
|
"switch-to-workspace-down",
|
||||||
common_keybindings,
|
common_keybindings,
|
||||||
META_KEY_BINDING_NONE,
|
META_KEY_BINDING_NONE,
|
||||||
META_KEYBINDING_ACTION_WORKSPACE_DOWN,
|
META_KEYBINDING_ACTION_WORKSPACE_DOWN,
|
||||||
NULL, 0);
|
handle_switch_to_workspace, META_MOTION_DOWN);
|
||||||
|
|
||||||
|
|
||||||
/* The ones which have inverses. These can't be bound to any keystroke
|
/* The ones which have inverses. These can't be bound to any keystroke
|
||||||
|
@@ -778,6 +778,9 @@ create_monitor_skeleton (GDBusObjectManagerServer *manager,
|
|||||||
meta_dbus_object_skeleton_set_idle_monitor (object, skeleton);
|
meta_dbus_object_skeleton_set_idle_monitor (object, skeleton);
|
||||||
|
|
||||||
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
|
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
|
||||||
|
|
||||||
|
g_object_unref (skeleton);
|
||||||
|
g_object_unref (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -77,6 +77,7 @@ struct _MetaMonitorConfig {
|
|||||||
GHashTable *configs;
|
GHashTable *configs;
|
||||||
MetaConfiguration *current;
|
MetaConfiguration *current;
|
||||||
gboolean current_is_stored;
|
gboolean current_is_stored;
|
||||||
|
gboolean current_is_for_laptop_lid;
|
||||||
MetaConfiguration *previous;
|
MetaConfiguration *previous;
|
||||||
|
|
||||||
GFile *file;
|
GFile *file;
|
||||||
@@ -876,7 +877,8 @@ apply_configuration (MetaMonitorConfig *self,
|
|||||||
|
|
||||||
/* Stored (persistent) configurations override the previous one always.
|
/* Stored (persistent) configurations override the previous one always.
|
||||||
Also, we clear the previous configuration if the current one (which is
|
Also, we clear the previous configuration if the current one (which is
|
||||||
about to become previous) is stored.
|
about to become previous) is stored, or if the current one has
|
||||||
|
different outputs.
|
||||||
*/
|
*/
|
||||||
if (stored ||
|
if (stored ||
|
||||||
(self->current && self->current_is_stored))
|
(self->current && self->current_is_stored))
|
||||||
@@ -886,12 +888,28 @@ apply_configuration (MetaMonitorConfig *self,
|
|||||||
self->previous = NULL;
|
self->previous = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/* Despite the name, config_equal() only checks the set of outputs,
|
||||||
|
not their modes
|
||||||
|
*/
|
||||||
|
if (self->current && config_equal (self->current, config))
|
||||||
{
|
{
|
||||||
self->previous = self->current;
|
self->previous = self->current;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (self->current)
|
||||||
|
config_free (self->current);
|
||||||
|
self->previous = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self->current = config;
|
self->current = config;
|
||||||
self->current_is_stored = stored;
|
self->current_is_stored = stored;
|
||||||
|
/* If true, we'll be overridden at the end of this call
|
||||||
|
inside turn_off_laptop_display()
|
||||||
|
*/
|
||||||
|
self->current_is_for_laptop_lid = FALSE;
|
||||||
|
|
||||||
if (self->current == self->previous)
|
if (self->current == self->previous)
|
||||||
self->previous = NULL;
|
self->previous = NULL;
|
||||||
@@ -1008,8 +1026,16 @@ meta_monitor_config_apply_stored (MetaMonitorConfig *self,
|
|||||||
if (self->lid_is_closed &&
|
if (self->lid_is_closed &&
|
||||||
stored->n_outputs > 1 &&
|
stored->n_outputs > 1 &&
|
||||||
laptop_display_is_on (stored))
|
laptop_display_is_on (stored))
|
||||||
return apply_configuration (self, make_laptop_lid_config (stored),
|
{
|
||||||
manager, FALSE);
|
if (apply_configuration (self, make_laptop_lid_config (stored),
|
||||||
|
manager, FALSE))
|
||||||
|
{
|
||||||
|
self->current_is_for_laptop_lid = TRUE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return apply_configuration (self, stored, manager, TRUE);
|
return apply_configuration (self, stored, manager, TRUE);
|
||||||
}
|
}
|
||||||
@@ -1356,6 +1382,7 @@ turn_off_laptop_display (MetaMonitorConfig *self,
|
|||||||
|
|
||||||
new = make_laptop_lid_config (self->current);
|
new = make_laptop_lid_config (self->current);
|
||||||
apply_configuration (self, new, manager, FALSE);
|
apply_configuration (self, new, manager, FALSE);
|
||||||
|
self->current_is_for_laptop_lid = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1375,7 +1402,7 @@ power_client_changed_cb (UpClient *client,
|
|||||||
|
|
||||||
if (is_closed)
|
if (is_closed)
|
||||||
turn_off_laptop_display (self, manager);
|
turn_off_laptop_display (self, manager);
|
||||||
else
|
else if (self->current_is_for_laptop_lid)
|
||||||
meta_monitor_config_restore_previous (self, manager);
|
meta_monitor_config_restore_previous (self, manager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -75,6 +75,7 @@ main (int argc, char **argv)
|
|||||||
g_printerr ("mutter: %s\n", error->message);
|
g_printerr ("mutter: %s\n", error->message);
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
g_option_context_free (ctx);
|
||||||
|
|
||||||
if (plugin)
|
if (plugin)
|
||||||
meta_plugin_manager_load (plugin);
|
meta_plugin_manager_load (plugin);
|
||||||
|
@@ -823,6 +823,8 @@ sync_client_window_mapped (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
gboolean should_be_mapped = client_window_should_be_mapped (window);
|
gboolean should_be_mapped = client_window_should_be_mapped (window);
|
||||||
|
|
||||||
|
g_return_if_fail (!window->override_redirect);
|
||||||
|
|
||||||
if (window->mapped == should_be_mapped)
|
if (window->mapped == should_be_mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1487,6 +1489,7 @@ meta_window_new (MetaDisplay *display,
|
|||||||
/* disable show desktop mode unless we're a desktop component */
|
/* disable show desktop mode unless we're a desktop component */
|
||||||
maybe_leave_show_desktop_mode (window);
|
maybe_leave_show_desktop_mode (window);
|
||||||
|
|
||||||
|
if (!window->override_redirect)
|
||||||
sync_client_window_mapped (window);
|
sync_client_window_mapped (window);
|
||||||
|
|
||||||
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
|
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
|
||||||
@@ -2291,6 +2294,7 @@ implement_showing (MetaWindow *window,
|
|||||||
meta_verbose ("Implement showing = %d for window %s\n",
|
meta_verbose ("Implement showing = %d for window %s\n",
|
||||||
showing, window->desc);
|
showing, window->desc);
|
||||||
|
|
||||||
|
if (!window->override_redirect)
|
||||||
sync_client_window_mapped (window);
|
sync_client_window_mapped (window);
|
||||||
|
|
||||||
if (!showing)
|
if (!showing)
|
||||||
@@ -5397,6 +5401,9 @@ meta_window_move_to_monitor (MetaWindow *window,
|
|||||||
window->tile_monitor_number = monitor;
|
window->tile_monitor_number = monitor;
|
||||||
|
|
||||||
meta_window_move_between_rects (window, &old_area, &new_area);
|
meta_window_move_between_rects (window, &old_area, &new_area);
|
||||||
|
|
||||||
|
if (window->fullscreen || window->override_redirect)
|
||||||
|
meta_screen_queue_check_fullscreen (window->screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user