Compare commits
	
		
			17 Commits
		
	
	
		
			wip/kms-co
			...
			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,7 +3,7 @@ AC_CONFIG_MACRO_DIR([m4]) | ||||
|  | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [12]) | ||||
| m4_define([mutter_micro_version], [0]) | ||||
| m4_define([mutter_micro_version], [2]) | ||||
|  | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
|   | ||||
| @@ -500,7 +500,8 @@ set_brightness (MetaBackground *self, | ||||
|  | ||||
|   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); | ||||
|       cogl_pipeline_set_uniform_1f (priv->pipeline, | ||||
| @@ -508,6 +509,14 @@ set_brightness (MetaBackground *self, | ||||
|                                                                         "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)); | ||||
|  | ||||
| @@ -525,6 +534,9 @@ set_vignette_sharpness (MetaBackground *self, | ||||
|  | ||||
|   priv->vignette_sharpness = sharpness; | ||||
|  | ||||
|   if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL)) | ||||
|     return; | ||||
|  | ||||
|   if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE) | ||||
|     { | ||||
|       ensure_pipeline (self); | ||||
| @@ -545,6 +557,9 @@ add_vignette (MetaBackground *self) | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|   static CoglSnippet *snippet = NULL; | ||||
|  | ||||
|   if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL)) | ||||
|     return; | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|  | ||||
|   /* Cogl automatically caches pipelines with no eviction policy, | ||||
|   | ||||
| @@ -432,6 +432,9 @@ texture_tower_revalidate (MetaTextureTower *tower, | ||||
|                           int               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, ... */ | ||||
| } | ||||
|  | ||||
| /* ... 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: | ||||
|  * @basic_rect: Input rectangle | ||||
| @@ -629,8 +649,9 @@ meta_rectangle_get_minimal_spanning_set_for_region ( | ||||
|  | ||||
|   for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next) | ||||
|     { | ||||
|       GList *rect_iter;  | ||||
|       MetaRectangle *strut_rect = &((MetaStrut*)strut_iter->data)->rect; | ||||
|       GList *rect_iter; | ||||
|       MetaStrut *strut = (MetaStrut*)strut_iter->data; | ||||
|       MetaRectangle *strut_rect = &strut->rect; | ||||
|  | ||||
|       tmp_list = ret; | ||||
|       ret = NULL; | ||||
| @@ -638,7 +659,9 @@ meta_rectangle_get_minimal_spanning_set_for_region ( | ||||
|       while (rect_iter) | ||||
|         { | ||||
|           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); | ||||
|           else | ||||
|             { | ||||
|   | ||||
| @@ -2522,7 +2522,19 @@ handle_switch_to_workspace (MetaDisplay    *display, | ||||
|   gint which = binding->handler->data; | ||||
|   MetaWorkspace *workspace; | ||||
|  | ||||
|   workspace = meta_screen_get_workspace_by_index (screen, which); | ||||
|   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); | ||||
|     } | ||||
|  | ||||
|   if (workspace) | ||||
|     { | ||||
| @@ -3359,28 +3371,28 @@ init_builtin_key_bindings (MetaDisplay *display) | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_NONE, | ||||
|                           META_KEYBINDING_ACTION_WORKSPACE_LEFT, | ||||
|                           NULL, 0); | ||||
|                           handle_switch_to_workspace, META_MOTION_LEFT); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "switch-to-workspace-right", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_NONE, | ||||
|                           META_KEYBINDING_ACTION_WORKSPACE_RIGHT, | ||||
|                           NULL, 0); | ||||
|                           handle_switch_to_workspace, META_MOTION_RIGHT); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "switch-to-workspace-up", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_NONE, | ||||
|                           META_KEYBINDING_ACTION_WORKSPACE_UP, | ||||
|                           NULL, 0); | ||||
|                           handle_switch_to_workspace, META_MOTION_UP); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "switch-to-workspace-down", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_NONE, | ||||
|                           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 | ||||
|   | ||||
| @@ -778,6 +778,9 @@ create_monitor_skeleton (GDBusObjectManagerServer *manager, | ||||
|   meta_dbus_object_skeleton_set_idle_monitor (object, skeleton); | ||||
|  | ||||
|   g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object)); | ||||
|  | ||||
|   g_object_unref (skeleton); | ||||
|   g_object_unref (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -77,6 +77,7 @@ struct _MetaMonitorConfig { | ||||
|   GHashTable *configs; | ||||
|   MetaConfiguration *current; | ||||
|   gboolean current_is_stored; | ||||
|   gboolean current_is_for_laptop_lid; | ||||
|   MetaConfiguration *previous; | ||||
|  | ||||
|   GFile *file; | ||||
| @@ -876,7 +877,8 @@ apply_configuration (MetaMonitorConfig  *self, | ||||
|  | ||||
|   /* Stored (persistent) configurations override the previous one always. | ||||
|      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 || | ||||
|       (self->current && self->current_is_stored)) | ||||
| @@ -887,11 +889,27 @@ apply_configuration (MetaMonitorConfig  *self, | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       self->previous = self->current; | ||||
|       /* 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; | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           if (self->current) | ||||
|             config_free (self->current); | ||||
|           self->previous = NULL; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   self->current = config; | ||||
|   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) | ||||
|     self->previous = NULL; | ||||
| @@ -1008,8 +1026,16 @@ meta_monitor_config_apply_stored (MetaMonitorConfig  *self, | ||||
|       if (self->lid_is_closed && | ||||
|           stored->n_outputs > 1 && | ||||
|           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 | ||||
|         return apply_configuration (self, stored, manager, TRUE); | ||||
|     } | ||||
| @@ -1356,6 +1382,7 @@ turn_off_laptop_display (MetaMonitorConfig  *self, | ||||
|  | ||||
|   new = make_laptop_lid_config (self->current); | ||||
|   apply_configuration (self, new, manager, FALSE); | ||||
|   self->current_is_for_laptop_lid = TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1375,7 +1402,7 @@ power_client_changed_cb (UpClient   *client, | ||||
|  | ||||
|       if (is_closed) | ||||
|         turn_off_laptop_display (self, manager); | ||||
|       else | ||||
|       else if (self->current_is_for_laptop_lid) | ||||
|         meta_monitor_config_restore_previous (self, manager); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -75,6 +75,7 @@ main (int argc, char **argv) | ||||
|       g_printerr ("mutter: %s\n", error->message); | ||||
|       exit (1); | ||||
|     } | ||||
|   g_option_context_free (ctx); | ||||
|  | ||||
|   if (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); | ||||
|  | ||||
|   g_return_if_fail (!window->override_redirect); | ||||
|  | ||||
|   if (window->mapped == should_be_mapped) | ||||
|     return; | ||||
|  | ||||
| @@ -1487,7 +1489,8 @@ meta_window_new (MetaDisplay   *display, | ||||
|   /* disable show desktop mode unless we're a desktop component */ | ||||
|   maybe_leave_show_desktop_mode (window); | ||||
|  | ||||
|   sync_client_window_mapped (window); | ||||
|   if (!window->override_redirect) | ||||
|     sync_client_window_mapped (window); | ||||
|  | ||||
|   meta_window_queue (window, META_QUEUE_CALC_SHOWING); | ||||
|   /* See bug 303284; a transient of the given window can already exist, in which | ||||
| @@ -2291,7 +2294,8 @@ implement_showing (MetaWindow *window, | ||||
|   meta_verbose ("Implement showing = %d for window %s\n", | ||||
|                 showing, window->desc); | ||||
|  | ||||
|   sync_client_window_mapped (window); | ||||
|   if (!window->override_redirect) | ||||
|     sync_client_window_mapped (window); | ||||
|  | ||||
|   if (!showing) | ||||
|     { | ||||
| @@ -5397,6 +5401,9 @@ meta_window_move_to_monitor (MetaWindow  *window, | ||||
|     window->tile_monitor_number = monitor; | ||||
|  | ||||
|   meta_window_move_between_rects (window, &old_area, &new_area); | ||||
|  | ||||
|   if (window->fullscreen || window->override_redirect) | ||||
|     meta_screen_queue_check_fullscreen (window->screen); | ||||
| } | ||||
|  | ||||
| void | ||||
|   | ||||
		Reference in New Issue
	
	Block a user