Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
badebfae6b | ||
![]() |
6693420005 | ||
![]() |
0e3aab8691 | ||
![]() |
55840c626c | ||
![]() |
f0e5656717 | ||
![]() |
8af0e10aa4 | ||
![]() |
71f574bc52 | ||
![]() |
2518d6138f | ||
![]() |
36be084655 | ||
![]() |
d863182810 | ||
![]() |
85c2bc29e6 | ||
![]() |
4eeeb1557a |
15
NEWS
15
NEWS
@@ -1,3 +1,18 @@
|
|||||||
|
3.10.1
|
||||||
|
======
|
||||||
|
* Don't apply fullscreen workarounds to CSD windows [Giovanni; #708718]
|
||||||
|
* Fix hangs during DND operations [Adel; #709340]
|
||||||
|
* Use nearest-pixel interpolation when possible [Hans; #708389]
|
||||||
|
* Fix tile previews getting stuck on right click during drags [Lionel; #704759]
|
||||||
|
* Misc bug fixes [Giovanni, Jasper; #708420]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Giovanni Campagna, Adel Gadllah, Lionel Landwerlin, Hans Petter Jansson,
|
||||||
|
Jasper St. Pierre
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Khaled Hosny [ar], Reinout van Schouwen [nl], Carles Ferrando [ca@valencia]
|
||||||
|
|
||||||
3.10.0.1
|
3.10.0.1
|
||||||
========
|
========
|
||||||
* Fix bug when a window changed size twice in a single frame - this
|
* Fix bug when a window changed size twice in a single frame - this
|
||||||
|
@@ -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], [10])
|
m4_define([mutter_minor_version], [10])
|
||||||
m4_define([mutter_micro_version], [0.1])
|
m4_define([mutter_micro_version], [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])
|
||||||
|
2834
po/ca@valencia.po
2834
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,7 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include <meta/meta-shaped-texture.h>
|
#include <meta/meta-shaped-texture.h>
|
||||||
|
#include "clutter-utils.h"
|
||||||
#include "meta-texture-tower.h"
|
#include "meta-texture-tower.h"
|
||||||
|
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
@@ -209,6 +210,7 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
|||||||
CoglTexture *paint_tex;
|
CoglTexture *paint_tex;
|
||||||
ClutterActorBox alloc;
|
ClutterActorBox alloc;
|
||||||
cairo_region_t *blended_region = NULL;
|
cairo_region_t *blended_region = NULL;
|
||||||
|
CoglPipelineFilter filter;
|
||||||
|
|
||||||
if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
|
if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
|
||||||
return;
|
return;
|
||||||
@@ -245,6 +247,22 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
|||||||
if (tex_width == 0 || tex_height == 0) /* no contents yet */
|
if (tex_width == 0 || tex_height == 0) /* no contents yet */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* Use nearest-pixel interpolation if the texture is unscaled. This
|
||||||
|
* improves performance, especially with software rendering.
|
||||||
|
*/
|
||||||
|
|
||||||
|
filter = COGL_PIPELINE_FILTER_LINEAR;
|
||||||
|
|
||||||
|
if (!clutter_actor_is_in_clone_paint (actor))
|
||||||
|
{
|
||||||
|
int x_origin, y_origin;
|
||||||
|
|
||||||
|
if (meta_actor_is_untransformed (actor,
|
||||||
|
&x_origin,
|
||||||
|
&y_origin))
|
||||||
|
filter = COGL_PIPELINE_FILTER_NEAREST;
|
||||||
|
}
|
||||||
|
|
||||||
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||||
fb = cogl_get_draw_framebuffer ();
|
fb = cogl_get_draw_framebuffer ();
|
||||||
|
|
||||||
@@ -273,6 +291,7 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
|||||||
|
|
||||||
opaque_pipeline = get_unblended_pipeline (ctx);
|
opaque_pipeline = get_unblended_pipeline (ctx);
|
||||||
cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex);
|
cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex);
|
||||||
|
cogl_pipeline_set_layer_filters (opaque_pipeline, 0, filter, filter);
|
||||||
|
|
||||||
n_rects = cairo_region_num_rectangles (region);
|
n_rects = cairo_region_num_rectangles (region);
|
||||||
for (i = 0; i < n_rects; i++)
|
for (i = 0; i < n_rects; i++)
|
||||||
@@ -314,9 +333,11 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
|||||||
{
|
{
|
||||||
pipeline = get_masked_pipeline (ctx);
|
pipeline = get_masked_pipeline (ctx);
|
||||||
cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture);
|
cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture);
|
||||||
|
cogl_pipeline_set_layer_filters (pipeline, 1, filter, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex);
|
cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex);
|
||||||
|
cogl_pipeline_set_layer_filters (pipeline, 0, filter, filter);
|
||||||
|
|
||||||
{
|
{
|
||||||
CoglColor color;
|
CoglColor color;
|
||||||
|
@@ -973,7 +973,7 @@ queue_send_frame_messages_timeout (MetaWindowActor *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
interval = (int)(1000000 / refresh_rate) * 6;
|
interval = (int)(1000000 / refresh_rate) * 6;
|
||||||
offset = MAX (0, current_time - priv->frame_drawn_time + interval) / 1000;
|
offset = MAX (0, priv->frame_drawn_time + interval - current_time) / 1000;
|
||||||
|
|
||||||
/* The clutter master clock source has already been added with META_PRIORITY_REDRAW,
|
/* The clutter master clock source has already been added with META_PRIORITY_REDRAW,
|
||||||
* so the timer will run *after* the clutter frame handling, if a frame is ready
|
* so the timer will run *after* the clutter frame handling, if a frame is ready
|
||||||
|
@@ -447,12 +447,14 @@ setup_constraint_info (ConstraintInfo *info,
|
|||||||
|
|
||||||
/* Workaround braindead legacy apps that don't know how to
|
/* Workaround braindead legacy apps that don't know how to
|
||||||
* fullscreen themselves properly - don't get fooled by
|
* fullscreen themselves properly - don't get fooled by
|
||||||
* windows which hide their titlebar when maximized; that's
|
* windows which hide their titlebar when maximized or which are
|
||||||
* not the same as fullscreen, even if there are no struts
|
* client decorated; that's not the same as fullscreen, even
|
||||||
* making the workarea smaller than the monitor.
|
* if there are no struts making the workarea smaller than
|
||||||
|
* the monitor.
|
||||||
*/
|
*/
|
||||||
if (meta_prefs_get_force_fullscreen() &&
|
if (meta_prefs_get_force_fullscreen() &&
|
||||||
!window->hide_titlebar_when_maximized &&
|
!window->hide_titlebar_when_maximized &&
|
||||||
|
window->decorated &&
|
||||||
meta_rectangle_equal (new, &monitor_info->rect) &&
|
meta_rectangle_equal (new, &monitor_info->rect) &&
|
||||||
window->has_fullscreen_func &&
|
window->has_fullscreen_func &&
|
||||||
!window->fullscreen)
|
!window->fullscreen)
|
||||||
|
@@ -2349,6 +2349,7 @@ event_callback (XEvent *event,
|
|||||||
|
|
||||||
if ((window &&
|
if ((window &&
|
||||||
meta_grab_op_is_mouse (display->grab_op) &&
|
meta_grab_op_is_mouse (display->grab_op) &&
|
||||||
|
(device_event->mods.effective & display->window_grab_modifiers) &&
|
||||||
display->grab_button != device_event->detail &&
|
display->grab_button != device_event->detail &&
|
||||||
display->grab_window == window) ||
|
display->grab_window == window) ||
|
||||||
grab_op_is_keyboard (display->grab_op))
|
grab_op_is_keyboard (display->grab_op))
|
||||||
|
@@ -287,6 +287,7 @@ idle_monitor_watch_free (MetaIdleMonitorWatch *watch)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
monitor = watch->monitor;
|
monitor = watch->monitor;
|
||||||
|
g_object_ref (monitor);
|
||||||
|
|
||||||
if (watch->idle_source_id)
|
if (watch->idle_source_id)
|
||||||
{
|
{
|
||||||
@@ -304,6 +305,7 @@ idle_monitor_watch_free (MetaIdleMonitorWatch *watch)
|
|||||||
g_hash_table_remove (monitor->alarms, (gpointer) watch->xalarm);
|
g_hash_table_remove (monitor->alarms, (gpointer) watch->xalarm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_unref (monitor);
|
||||||
g_slice_free (MetaIdleMonitorWatch, watch);
|
g_slice_free (MetaIdleMonitorWatch, watch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1484,14 +1484,12 @@ get_default_focus_window (MetaStack *stack,
|
|||||||
* or top window in same group as not_this_one.
|
* or top window in same group as not_this_one.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MetaWindow *topmost_dock;
|
|
||||||
MetaWindow *transient_parent;
|
MetaWindow *transient_parent;
|
||||||
MetaWindow *topmost_in_group;
|
MetaWindow *topmost_in_group;
|
||||||
MetaWindow *topmost_overall;
|
MetaWindow *topmost_overall;
|
||||||
MetaGroup *not_this_one_group;
|
MetaGroup *not_this_one_group;
|
||||||
GList *link;
|
GList *link;
|
||||||
|
|
||||||
topmost_dock = NULL;
|
|
||||||
transient_parent = NULL;
|
transient_parent = NULL;
|
||||||
topmost_in_group = NULL;
|
topmost_in_group = NULL;
|
||||||
topmost_overall = NULL;
|
topmost_overall = NULL;
|
||||||
@@ -1517,10 +1515,6 @@ get_default_focus_window (MetaStack *stack,
|
|||||||
(workspace == NULL ||
|
(workspace == NULL ||
|
||||||
meta_window_located_on_workspace (window, workspace)))
|
meta_window_located_on_workspace (window, workspace)))
|
||||||
{
|
{
|
||||||
if (topmost_dock == NULL &&
|
|
||||||
window->type == META_WINDOW_DOCK)
|
|
||||||
topmost_dock = window;
|
|
||||||
|
|
||||||
if (not_this_one != NULL)
|
if (not_this_one != NULL)
|
||||||
{
|
{
|
||||||
if (transient_parent == NULL &&
|
if (transient_parent == NULL &&
|
||||||
@@ -1538,10 +1532,6 @@ get_default_focus_window (MetaStack *stack,
|
|||||||
topmost_in_group = window;
|
topmost_in_group = window;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note that DESKTOP windows can be topmost_overall so
|
|
||||||
* we prefer focusing desktop or other windows over
|
|
||||||
* focusing dock, even though docks are stacked higher.
|
|
||||||
*/
|
|
||||||
if (topmost_overall == NULL &&
|
if (topmost_overall == NULL &&
|
||||||
window->type != META_WINDOW_DOCK &&
|
window->type != META_WINDOW_DOCK &&
|
||||||
(!must_be_at_point ||
|
(!must_be_at_point ||
|
||||||
@@ -1563,7 +1553,7 @@ get_default_focus_window (MetaStack *stack,
|
|||||||
else if (topmost_overall)
|
else if (topmost_overall)
|
||||||
return topmost_overall;
|
return topmost_overall;
|
||||||
else
|
else
|
||||||
return topmost_dock;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaWindow*
|
MetaWindow*
|
||||||
|
@@ -9711,13 +9711,16 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
|||||||
switch (xev->evtype)
|
switch (xev->evtype)
|
||||||
{
|
{
|
||||||
case XI_ButtonRelease:
|
case XI_ButtonRelease:
|
||||||
|
if (xev->detail == 1)
|
||||||
|
{
|
||||||
meta_display_check_threshold_reached (window->display,
|
meta_display_check_threshold_reached (window->display,
|
||||||
xev->root_x,
|
xev->root_x,
|
||||||
xev->root_y);
|
xev->root_y);
|
||||||
/* If the user was snap moving then ignore the button release
|
/* If the user was snap moving then ignore the button
|
||||||
* because they may have let go of shift before releasing the
|
* release because they may have let go of shift before
|
||||||
* mouse button and they almost certainly do not want a
|
* releasing the mouse button and they almost certainly do
|
||||||
* non-snapped movement to occur from the button release.
|
* not want a non-snapped movement to occur from the button
|
||||||
|
* release.
|
||||||
*/
|
*/
|
||||||
if (!window->display->grab_last_user_action_was_snap)
|
if (!window->display->grab_last_user_action_was_snap)
|
||||||
{
|
{
|
||||||
@@ -9750,8 +9753,8 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
|||||||
update_tile_mode (window);
|
update_tile_mode (window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_display_end_grab_op (window->display, xev->time);
|
meta_display_end_grab_op (window->display, xev->time);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XI_Motion:
|
case XI_Motion:
|
||||||
|
@@ -419,13 +419,13 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
GSList *bindings;
|
GSList *bindings;
|
||||||
|
|
||||||
/** for keybindings that can have shift or not like Alt+Tab */
|
/* for keybindings that can have shift or not like Alt+Tab */
|
||||||
gboolean add_shift:1;
|
gboolean add_shift:1;
|
||||||
|
|
||||||
/** for keybindings that apply only to a window */
|
/* for keybindings that apply only to a window */
|
||||||
gboolean per_window:1;
|
gboolean per_window:1;
|
||||||
|
|
||||||
/** for keybindings not added with meta_display_add_keybinding() */
|
/* for keybindings not added with meta_display_add_keybinding() */
|
||||||
gboolean builtin:1;
|
gboolean builtin:1;
|
||||||
} MetaKeyPref;
|
} MetaKeyPref;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user